Вопрос по url-parameters, url, query-string, javascript – Получить экранированный параметр URL

301

m ищет плагин jQuery, который может получить параметры URL и поддерживать эту строку поиска без вывода ошибки JavaScript: "неправильная последовательность URI ", Если нетПлагин JQuery, который поддерживает это, мне нужно знать, как изменить его для поддержки этого.

?search=%E6%F8%E5

Значение параметра URL при декодировании должно быть:

æøå

(персонажи норвежские).

Я неу меня нет доступа к серверу, поэтому я не могуне могу ничего изменить на нем.

Взгляни наstackoverflow.com/questions/901115/get-querystring-with-jquery/... Artem Barger
Смотрите мой ответ для современного решения:stackoverflow.com/a/19992436/64949 Sindre Sorhus
Причина, по которой вы получаетенеправильная последовательность URI " потому что большинство функций используютdecodeURIComponent(), Норвежские символы, скорее всего, были закодированы с использованием чего-то вродеescape() и изменениеdecodeURIComponent() позвонитьunescape() должно помочь Kevin M

Ваш Ответ

19   ответов
294

Ниже приведено то, что я создал из комментариев здесь, а также исправление ошибок, не упомянутых (например, возвращение нуля, а не 'ноль'):

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}
Как насчет добавленияnew перед RegExp? Меньше предупреждений от ворса. ripper234
Ааа, действительно. Виноват. Хорошо, хорошо иметь скрипку и хорошо иметь версию, которая может работать с (необязательными) URL-адресами, отличными от текущего местоположения. Orwellophile
Это должен быть принятый ответ. Возвращаемся к нулю вместо "ноль" это намного лучше. Art
Это работает намного лучше, чем приведенное выше решение в моем тестировании. peelman
2

Вы не должны использовать jQuery для чего-то подобного!

Современный способ - использовать небольшие модули многократного использования через менеджер пакетов, такой как Bower.I '

мы создали крошечныймодуль который может анализировать строку запроса в объект. Используйте это так:

// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå
Если ты'повторяю этоне современно иметь рамки, которыехорошо. Но, на мой взгляд, фреймворки действительно имеют свое место. JQuery выглядит все менее и менее симпатичным для меня, хотя. Lodewijk
-1

Небольшая модификация ответа @pauloppenheim, так как он не будет правильно обрабатывать имена параметров, которые могут быть частью других имен параметров.

Например: если у вас естьappenv» & "окр» параметры, переопределяющие значение дляокр» можно забрать "appenv» значение.

Fix:

var urlParamVal = function (name) {
    var result = RegExp("(&|\\?)" + name + "=(.+?)(&|$)").exec(location.search);
    return result ? decodeURIComponent(result[2]) : "";
};
-1
function getURLParameters(paramName) 
{
        var sURL = window.document.URL.toString();  
    if (sURL.indexOf("?") > 0)
    {
       var arrParams = sURL.split("?");         
       var arrURLParams = arrParams[1].split("&");      
       var arrParamNames = new Array(arrURLParams.length);
       var arrParamValues = new Array(arrURLParams.length);     
       var i = 0;
       for (i=0;i
106

То, что вы действительно хотите, этоПлагин jQuery URL Parser, С помощью этого плагина получение значения определенного параметра URL (для текущего URL) выглядит следующим образом:

$.url().param('foo');

Если вы хотите объект с именами параметров в качестве ключей и значения параметров в качестве значений, вы 'просто позвониparam() без аргумента, вот так:

$.url().param();

Эта библиотека также работает с другими URL-адресами, а не только с текущими:

$.url('http://allmarkedup.com?sky=blue&grass=green').param();
$('#myElement').url().param(); // works with elements that have 'src', 'href' or 'action' attributes

Поскольку это целая библиотека для разбора URL, вы также можете получить другую информацию из URL, например, указанный порт, путь, протокол и т. Д.

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value');
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

Он также имеет другие функции, проверьте егодомашняя страница для большего количества документов и примеров.

Вместо того, чтобы писать свой собственный анализатор URI для этой конкретной цели,своего рода работает всамый случаях, используйте фактический парсер URI. В зависимости от ответа, код из других ответов может возвращаться'null' вместоnullнеужелиработать с пустыми параметрами (?foo=&bar=x), Можно't анализирует и возвращает все параметры сразу, повторяет работу, если вы неоднократно запрашиваете URL для параметров и т. д.

Использовать фактический парсер URI, нене изобретай свой.

Для тех, кто не любит jQuery, естьверсия плагина, которыйс чистого JS.

Вопрос говоритJavascript» (Я думаю, что это означает DOM напрямую) или JQuery. Так что любой другой сделает. brunoais
Это ответ, который я искал, и он очень jQuery-иш, в отличие от некоторых других ответов. Ehtesh Choudhury
Плагин обрабатывает кодировку URI или мне нужно декодировать его вручную? Roberto Linares
Вопрос в том "получить параметр URL с помощью jQuery ", Мой ответ отвечает на вопрос. Другие ответы инструктируют пользователя в основном написать свой собственный анализатор URI для этого конкретного варианта использования, что является ужасной идеей. Парсинг URI 'Сложнее, чем думают люди. Lucas
0

чтобы получить динамические переменные, хранящиеся в URL-адресе в качестве параметров, и сохранить их в виде переменных JavaScript, готовых для использования с вашими сценариями:

$.urlParam = function(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results==null){
       return null;
    }
    else{
       return results[1] || 0;
    }
}

example.com?param1=name¶m2=&id=6

$.urlParam('param1'); // name
$.urlParam('id');        // 6
$.urlParam('param2');   // null

//example params with spaces
http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));  
//output: Gold%20Coast

console.log(decodeURIComponent($.urlParam('city'))); 
//output: Gold Coast
2

функция, которая возвращает значение любой переменной параметра.

function GetURLParameter(sParam)
{
    var sPageURL = window.location.search.substring(1);
    var sURLVariables = sPageURL.split('&');
    for (var i = 0; i < sURLVariables.length; i++)
    {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == sParam)
        {
            return sParameterName[1];
        }
    }
}​

И вот как вы можете использовать эту функцию, предполагая, что URL-адрес "

http://example.com/?technology=jquery&блог = jquerybyexample».

var tech = GetURLParameter('technology');
var blog = GetURLParameter('blog');

Так в приведенном выше кодовой переменнойтек» буду иметь "JQuery» как значение иблог» переменная»с будетjquerybyexample».

418
function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}
ты можешь хотетьdecodeURIComponent ()» вместо "decodeURI ()»особенно если вы передаете интересные данные, такие как URL-адреса возврата, в качестве параметра URL perfectionist
@SanjeevKumarDangi Этот код нена самом деле работает. James Ward
Это все еще дает мне ошибкуURIError: URI искажен " Kevin M
-1 Не хватает jQuery. Cerin
6

Нужно добавить параметр i, чтобы сделать его нечувствительным к регистру:

  function getURLParameter(name) {
    return decodeURIComponent(
      (RegExp(name + '=' + '(.+?)(&|$)', 'i').exec(location.search) || [, ""])[1]
    );
  }
0

function getURLParameter(name) {
        return decodeURIComponent(
            (location.search.toLowerCase().match(RegExp("[?|&]" + name + '=(.+?)(&|$)')) || [, null])[1]
        );
    }


getURLParameter(id) или жеgetURLParameter(Id) Работает так же :)

0

Там'Здесь много глючного кода, и решения регулярных выражений очень медленные. Я нашел решение, которое работает в 20 раз быстрее, чем аналог регулярного выражения, и элегантно просто:

    /*
    *   @param      string      parameter to return the value of.
    *   @return     string      value of chosen parameter, if found.
    */
    function get_param(return_this)
    {
        return_this = return_this.replace(/\?/ig, "").replace(/=/ig, ""); // Globally replace illegal chars.

        var url = window.location.href;                                   // Get the URL.
        var parameters = url.substring(url.indexOf("?") + 1).split("&");  // Split by "param=value".
        var params = [];                                                  // Array to store individual values.

        for(var i = 0; i < parameters.length; i++)
            if(parameters[i].search(return_this + "=") != -1)
                return parameters[i].substring(parameters[i].indexOf("=") + 1).split("+");

        return "Parameter not found";
    }

console.log(get_param("parameterName"));

Regex не является основным и конечным решением, для этого типа проблем простое манипулирование строками может работать намного эффективнее.Исходный код

2
$.urlParam = function(name){
  var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(top.window.location.href); 
  return (results !== null) ? results[1] : 0;
}

$.urlParam("key");
-1

На всякий случай, если у вас, ребята, есть URL-адрес вроде localhost / index.xsp? A = 1 # что-то, и вам нужно получить параметр, а не хеш.

var vars = [], hash, anchor;
var q = document.URL.split('?')[1];
if(q != undefined){
    q = q.split('&');
    for(var i = 0; i < q.length; i++){
        hash = q[i].split('=');
        anchor = hash[1].split('#');
        vars.push(anchor[0]);
        vars[hash[0]] = anchor[0];
    }
}
40

Вы можете использовать браузер роднойlocation.search имущество:

function getParameter(paramName) {
  var searchString = window.location.search.substring(1),
      i, val, params = searchString.split("&");

  for (i=0;i<params.length;i++) {="" val="params[i].split("=");" if="" (val[0]="=" paramname)="" return="" unescape(val[1]);="" }="" null;="" <="" code=""></params.length;i++)>

Но есть несколько плагинов jQuery, которые могут вам помочь:

<a href="http://plugins.jquery.com/project/query-object">запрос-объект</a><a href="http://www.mathias-bank.de/2007/04/21/jquery-plugin-geturlparam-version-2/">getURLParam</a>
предложу использовать decodeURIComponent () вместо unescape () freedev
Это намного чище и более читабельно (и, вероятно, более без ошибок), чем все эти регулярные выражения. Timmmm
+1 это работает для современных браузеров, но некоторые разработчики должны работать с ...: | IE8: S. brunoais
43

Если вы неЧтобы узнать, какими будут параметры URL-адреса, и хотите получить объект с ключами и значениями, содержащимися в параметрах, вы можете использовать это:

function getParameters() {
  var searchString = window.location.search.substring(1),
      params = searchString.split("&"),
      hash = {};

  if (searchString == "") return {};
  for (var i = 0; i < params.length; i++) {
    var val = params[i].split("=");
    hash[unescape(val[0])] = unescape(val[1]);
  }
  return hash;
}

Вызов getParameters () с таким URL/posts?date=9/10/11&author=nilbus вернется:

{
  date:   '9/10/11',
  author: 'nilbus'
}

Я выиграл'не включать код здесь, так какЕще дальше от вопроса, но weareon.net опубликовал библиотеку, которая позволяет манипулировать параметрами и в URL:

Сообщение блога:http://blog.weareon.net/working-with-url-parameters-in-javascript/Код:http://pastebin.ubuntu.com/1163515/
Да, это лучше, чтобы получить все параметры. Все остальные решения, перечисленные здесь, повторяют регулярное выражение для каждого параметра. Alkaline
Эта функция возвращает неудобный объект:{"": undefined} когда в URL нет параметров. Лучше всего вернуть пустой объект, используяif(searchString=='') return {}; сразу послеsearchString назначение. Jordan Arseno
26

На основе999'ответ:

function getURLParameter(name) {
    return decodeURIComponent(
        (location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1]
    );  
}

Изменения:

decodeURI() заменяется наdecodeURIComponent()[?|&] добавляется в начале регулярного выражения
Может быть полезным для других, если бы вы могли объяснить, почему вы внесли эти изменения. Спасибо Timm
Безразлично»t обрабатывать пустые параметры:?a=&b=1, Лучше регулярное выражение будет:"[?&]"+name+"=([^&]*)" serg
-2

<script type="text/javascript">
    $(document).ready(function(){
        alert(getParameterByName("third"));
    });
    function getParameterByName(name){
        var url     = document.URL,
            count   = url.indexOf(name);
            sub     = url.substring(count);
            amper   = sub.indexOf("&"); 

        if(amper == "-1"){
            var param = sub.split("=");
            return param[1];
        }else{
            var param = sub.substr(0,amper).split("=");
            return param[1];
        }

    }
</script>
Этот код не проверен хорошо. Угадай, что происходит с запросом?twothrids=text Lyth
-1

Я создал простую функцию для получения параметра URL в JavaScript из URL, например так:

.....58e/web/viewer.html?page=*17*&getinfo=33


function buildLinkb(param) {
    var val = document.URL;
    var url = val.substr(val.indexOf(param))  
    var n=parseInt(url.replace(param+"=",""));
    alert(n+1); 
}
buildLinkb("page");

ВЫХОД:18

Будьте осторожны при публикации копируй и вставляй шаблонные / дословные ответы на несколько вопросов, они, как правило, помечаются как "спам» сообществом. Если ты'Если вы делаете это, то это обычно означает, что вопросы являются дубликатами, поэтому пометьте их как таковые:stackoverflow.com/a/11808489/419 Kev
1

После прочтения всех ответов я получил эту версию с + второй функцией для использования параметров в качестве флагов.

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)','i').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

function isSetURLParameter(name) {
    return (new RegExp('[?|&]' + name + '(?:[=|&|#|;|]|$)','i').exec(location.search) !== null)
}
Хороший ответ, только одно предупреждение. Согласно JSHint, [, ""] может вызвать проблемы для старых браузеров. Итак, используйте вместо этого [null, ""] или [undefined, ""]. Некоторые из нас все еще недовольны тем, что поддерживают IE8 и, смею сказать, IE7. Delicia Brummitt

Похожие вопросы