JavaScript URL解码功能


Answers:



237

这是一个完整的功能(取自PHPJS):

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}

34
+1:这才是真正的urldecode,处理空间的情况下被编码为+,非常感谢
马特恩德雷- Botond

1
这是使用PHP的urlencode()函数对数据进行编码时需要使用的功能。
Scott Keck-Warren

1
如果我没记错的话,这是将+解码为%20,而不是空格-那不是您真正想要的,不是吗?您需要空格,而不是编码字符的另一个版本...不?
克里斯·莫斯基尼

8
@ChrisMoschini:不,这是正确的,因为替换发生在解码调用之前。
lfaraone

1
非常感谢!!这是处理以前用php urlencode的jquery中的字符串的一种完美方法,正是我所需要的!
Dante Cullari

9

用这个

unescape(str);

我不是一个很棒的JS程序员,尝试了所有,而且效果很棒!


2
很酷的答案,但看起来像 decodeURIComponent()由于对非ASCII字符的支持不佳已过时了。
Brad Koch

9
decodeURIComponent(mystring);

您可以使用以下代码获取传递的参数:

//parse URL to get values: var i = getUrlVars()["i"];
function getUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

或通过这种单线获取参数:

location.search.split("your_parameter=")[1]

2
您应该window.location.search改用。
aloisdg移至codidact.com,2016年

3
//How decodeURIComponent Works

function proURIDecoder(val)
{
  val=val.replace(/\+/g, '%20');
  var str=val.split("%");
  var cval=str[0];
  for (var i=1;i<str.length;i++)
  {
    cval+=String.fromCharCode(parseInt(str[i].substring(0,2),16))+str[i].substring(2);
  }

  return cval;
}

document.write(proURIDecoder(window.location.href));

谢谢,这对我有用。encodeURIComponent对我不起作用(格式错误的URI序列)。
Smile4ever '16

2

如果您负责使用urlencode在PHP中编码数据,则PHP的rawurlencode可与JavaScript的encodeURIComponent一起使用,而无需替换+字符。


0

这是我使用的:

在JavaScript中:

var url = "http://www.mynewsfeed.com/articles/index.php?id=17";
var encoded_url = encodeURIComponent(url);

var decoded_url = decodeURIComponent(encoded_url);

在PHP中:

$url = "http://www.mynewsfeed.com/articles/index.php?id=17";
$encoded_url = url_encode(url);

$decoded_url = url_decode($encoded_url);

您也可以在此处在线尝试:http : //www.mynewsfeed.x10.mx/articles/index.php?id=17



0

decodeURIComponent()很好,但是您永远不要encodeURIComponent()直接使用它。这未能逃脱保留字符像*!'(,和)。请查看RFC3986(在此定义),以获取更多信息。Mozilla开发人员网络文档提供了很好的解释和解决方案。说明...

为了更严格地遵守RFC 3986(保留!,',(,)和*),即使这些字符没有正式的URI分隔用法,也可以安全地使用以下字符:

解...

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

如果不确定,请在JSBin.com上查看有效的演示示例。将此与直接在JSBin.com上运行不良演示进行比较encodeURIComponent()

好的代码结果:

thing%2athing%20thing%21

错误代码来自encodeURIComponent()

thing*thing%20thing!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.