JavaScript URL解码函数

157

什么是最好的JavaScript URL解码实用工具?编码也很好并且能够与jQuery良好配合使用将是额外的优点。


37
你有检查过 encodeURIComponentdecodeURIComponent 吗? - Gumbo
这真的是同一件事吗? - at.
@Gumbo:与URL编码和URL解码相同的东西- http://www.blooberry.com/indexdot/html/topics/urlencoding.htm - at.
9个回答

238

这里有一个完整的函数(从PHPJS获取):

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

34
+1:这是真正的URL解码,能够处理空格被编码为加号的情况,非常感谢。 - Máthé Endre-Botond
1
这是我需要使用的内容,当数据被编码为PHP的urlencode()函数时。 - Scott Keck-Warren
1
如果我没记错的话,这是将解码+作为%20,而不是作为空格-这不是你想要的,对吧?你想要空格,而不是另一种编码字符的版本...不是吗? - Chris Moschini
8
这是正确的,因为替换操作发生在解码调用之前。 - lfaraone
1
非常感谢!这是在使用PHP进行URL编码的jQuery字符串处理的完美方法,正是我所需要的! - Dante Cullari
显示剩余6条评论

220

1
谢谢大家!看起来这个是正确的答案,但是Gumbo先回答了..我觉得他应该得到这个荣誉。 - at.
16
这是一个不完整的答案。请参考@anshuman下面的urlDecode()实现。 - Steven Francolla
3
好的,我会尽力进行翻译。这句话的意思是“很好,但它没有去掉加号符号。@anshuman的回答对我来说最有效。” - MusikAnimal
2
不支持使用“++++”表示的空格。 - mjs

9
使用这个
unescape(str);

我不是一个很出色的JS程序员,尝试了所有方法,但这个方法非常好用!



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

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

谢谢,这对我有用。decodeURIComponent对我没用(URI序列格式不正确)。 - Smile4ever

2

如果您负责使用urlencode在PHP中对数据进行编码,那么PHP的rawurlencode可以与JavaScript的decodeURIComponent配合使用,而不需要替换+字符。


0

var uri = "my test.asp?name=ståle&car=saab";
console.log(encodeURI(uri));


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上的良好工作演示。将其与使用encodeURIComponent()直接在JSBin.com上进行的错误工作演示进行比较。

良好代码结果:

thing%2athing%20thing%21

encodeURIComponent()产生的错误代码结果:

thing*thing%20thing!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接