Javascript 获取转义URL参数

Javascript 获取转义URL参数,javascript,url,query-string,url-parameters,Javascript,Url,Query String,Url Parameters,我正在寻找一个jQuery插件,它可以获取URL参数,并支持这个搜索字符串,而不输出JavaScript错误:“格式错误的URI序列”。如果没有一个jQuery插件支持这一点,我需要知道如何修改它以支持这一点 ?search=%E6%F8%E5 URL参数的值在解码时应为: æøå (角色是挪威人) 我没有访问服务器的权限,因此无法修改服务器上的任何内容。您可以使用浏览器本机属性: function getParameter(paramName) { var searchString =

我正在寻找一个jQuery插件,它可以获取URL参数,并支持这个搜索字符串,而不输出JavaScript错误:“格式错误的URI序列”。如果没有一个jQuery插件支持这一点,我需要知道如何修改它以支持这一点

?search=%E6%F8%E5
URL参数的值在解码时应为:

æøå
(角色是挪威人)


我没有访问服务器的权限,因此无法修改服务器上的任何内容。

您可以使用浏览器本机属性:

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]);
    }
  }
  return null;
}
函数getParameter(paramName){
var searchString=window.location.search.substring(1),
i、 val,params=searchString.split(&);
对于(i=0;i基于:

变化:

  • decodeURI()
    替换为
    decodeURIComponent()
  • [?|&]
    添加在regexp的开头
函数getURLParameters(paramName)
{
var sURL=window.document.URL.toString();
if(sURL.indexOf(“?”)大于0)
{
var arrParams=剩余分割(“?”);
var arrrurlparams=arrParams[1]。拆分(“&”);
var arrParamNames=新数组(arrrurlparms.length);
var arrParamValues=新数组(arrrurlparms.length);
var i=0;

for(i=0;i下面是我从这里的评论中创建的内容,以及修复未提及的bug(例如实际返回null,而不是“null”):


如果您不知道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;
}
我将不在这里包含代码,因为它离问题更远,但weareon.net发布了一个库,允许对URL中的参数进行操作:

  • 博文:
  • 代码:

您真正想要的是。使用此插件,获取特定URL参数的值(对于当前URL)如下所示:

$.url().param('foo');
$.url().param();
.....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");
// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå
如果希望对象的参数名作为键,参数值作为值,只需调用
param()
,不带参数,如下所示:

$.url().param('foo');
$.url().param();
.....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");
// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå
此库还可用于其他URL,而不仅仅是当前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
),无法一次解析并返回所有参数,如果重复查询URL中的参数等,则重复该工作

使用实际的URI解析器,不要发明自己的解析器


对于那些不喜欢jQuery的人,我创建了一个简单的函数,从如下URL获取JavaScript中的URL参数:

$.url().param('foo');
$.url().param();
.....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");
// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå
输出:
18

这可能会有所帮助

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

$(文档).ready(函数(){
警报(getParameterByName(“第三”);
});
函数getParameterByName(名称){
var url=document.url,
count=url.indexOf(名称);
sub=url.substring(count);
安培=子指数(“&”);
如果(电流=“-1”){
var param=sub.split(“=”);
返回参数[1];
}否则{
var param=sub.substr(0,安培).split(“=”);
返回参数[1];
}
}

以防你们有localhost/index.xsp?a=1之类的url,并且需要获取参数而不是散列

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];
    }
}
var-vars=[],散列,锚定;
var q=document.URL.split(“?”)[1];
如果(q!=未定义){
q=q.分割('&');
对于(变量i=0;i
需要添加i参数以使其不区分大小写:

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

例如,返回任何参数变量值的函数

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];
        }
    }
}​

因此,在上面的代码中,变量“tech”的值为“jQuery”,变量“blog”的值为“jquerybyexample”。

在阅读了所有答案后,我最终得到了这个版本,并使用第二个函数将参数用作标志

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)
}

这里有很多错误代码,正则表达式解决方案非常慢。我发现一个解决方案比正则表达式解决方案快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"));
/*
*@param字符串参数返回的值。
*@返回所选参数的字符串值(如果找到)。
*/
函数get_param(返回此函数)
{
return\u this=return\u this.replace(//\?/ig,“”)。replace(//=/ig,“”;//全局替换非法字符。
var url=window.location.href;//获取url。
var parameters=url.substring(url.indexOf(“?”)+1.split(&”);//按“param=value”拆分。
var params=[];//用于存储单个值的数组。
对于(var i=0;i

Regex并不是一个包罗万象的解决方案,对于这类问题,简单的字符串操作可以更有效地处理大量问题。

对@pauloppenheim的答案稍加修改,因为它无法正确处理可能是其他参数名称一部分的参数名称

例如:如果您有“appenv”和“env”参数,则为“env”重新指定值可以选择“appenv”值

修正:


函数getURLParameter(名称){
返回解码组件(
(地点)
// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå
$.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