Получить экранированный параметр URL - PullRequest
301 голосов
/ 10 сентября 2009

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

?search=%E6%F8%E5

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

æøå

(символы норвежские).

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

Ответы [ 19 ]

1 голос
/ 06 мая 2013

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

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)
}
0 голосов
/ 02 июля 2013

Здесь много глючного кода, и решения регулярных выражений очень медленные. Я нашел решение, которое работает в 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 не является основным и конечным решением, для этого типа проблем простое манипулирование строками может работать намного эффективнее. Код источника .

0 голосов
/ 25 сентября 2012

На всякий случай, если у вас, ребята, есть 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];
    }
}
0 голосов
/ 06 января 2012
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<arrURLParams.length;i++)
       {
        var sParam =  arrURLParams[i].split("=");
        arrParamNames[i] = sParam[0];
        if (sParam[1] != "")
            arrParamValues[i] = unescape(sParam[1]);
        else
            arrParamValues[i] = "No Value";
       }

       for (i=0;i<arrURLParams.length;i++)
       {
                if(arrParamNames[i] == paramName){
            //alert("Param:"+arrParamValues[i]);
                return arrParamValues[i];
             }
       }
       return "No Parameters Found";
    }

}
0 голосов
/ 31 июля 2013

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

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

Fix:

var urlParamVal = function (name) {
    var result = RegExp("(&|\\?)" + name + "=(.+?)(&|$)").exec(location.search);
    return result ? decodeURIComponent(result[2]) : "";
};
0 голосов
/ 06 августа 2013
<script type="text/javascript">
function getURLParameter(name) {
        return decodeURIComponent(
            (location.search.toLowerCase().match(RegExp("[?|&]" + name + '=(.+?)(&|$)')) || [, null])[1]
        );
    }

</script>

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

0 голосов
/ 04 августа 2012

Я создал простую функцию для получения параметра 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

0 голосов
/ 18 августа 2014

Фрагмент кода jQuery, чтобы получить динамические переменные, хранящиеся в 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&param2=&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
0 голосов
/ 13 сентября 2012

Это может помочь.

<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>
...