解码函数

最好的 JavaScriptURL 解码工具是什么?编码也不错,与 jQuery 一起工作也是一个额外的好处。

197633 次浏览

下面是一个完整的函数(取自 PHPJS) :

function urldecode(str) {
return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}
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]
//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));

用这个

unescape(str);

我不是一个伟大的 JS 程序员,尝试了所有,这个工作真棒!

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

这是我用过的:

在 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

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

decodeURIComponent()很好,但是你永远不要直接使用 encodeURIComponent()。这无法转义保留字符,如 *!'()。看看 RFC3986 ,这是定义,更多的信息。Mozilla Developer Network 文档给出了很好的解释和解决方案。解释..。

要更严格地坚持 RFC3986(其中保留!’、(、)和 *) ,即使这些字符没有正式的 URI 分隔用法,也可以安全地使用以下内容:

解决方案。

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

如果你不确定,可以查看 < strong > good,working demo at JSBin.com 。将它与 < strong > bad,在 JSBin.com 上使用 encodeURIComponent()直接进行演示进行比较。

良好的代码结果:

thing%2athing%20thing%21

encodeURIComponent()导致的错误代码:

thing*thing%20thing!