根据https://stackoverflow.com/a/1734255/1529630,encodeURIComponent
与rawurlencode
相同,但!*'()
未转义,例如,
function encodeURIComponent($str) {
$revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')');
return strtr(rawurlencode($str), $revert);
}
但那么,差异是否重要?
通常情况下,我会使用类似
的内容 wrapper.innerHTML = '<a href="foo.php?bar=' + encodeURIComponent(myVar) + '">Link</a>';
echo '<a href="foo.php?bar=' . rawurlencode(myVar) . '">Link</a>';
如果那时,在foo.php
,我使用$_GET['bar']
,是否可能会得到不同的结果,因为encodeURIComponent
和rawurlencode
之间存在差异?
答案 0 :(得分:1)
您只需要转义在代码中可以有特殊用途的字符。
例如,以下内容可用于要求代码进行数学比较或计算 - &LT; ,&gt; ,+, - ,/,=
然后是特定于URL创建的保留字符,例如 - ? ,@,%,#
字符!*'()没有特殊含义,所以不会被误解,所以不需要转义。但是,您可以不必要地转义字符,因此它可能看起来像一个不同的结果,但它意味着/做同样的事情。
这有更彻底的细分 - http://www.blooberry.com/indexdot/html/topics/urlencoding.htm