PHP`rawurlencode`和JS`codingURIComponent`之间的不同行为是否重要?

时间:2013-09-23 20:13:01

标签: javascript php urlencode url-encoding encodeuricomponent

根据https://stackoverflow.com/a/1734255/1529630encodeURIComponentrawurlencode相同,但!*'()未转义,例如,

function encodeURIComponent($str) {
    $revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')');
    return strtr(rawurlencode($str), $revert);
}

但那么,差异是否重要?

通常情况下,我会使用类似

的内容
  • 在JS中
   
    wrapper.innerHTML = '<a href="foo.php?bar=' + encodeURIComponent(myVar) + '">Link</a>';
  • 在PHP中
   
    echo '<a href="foo.php?bar=' . rawurlencode(myVar) . '">Link</a>';

如果那时,在foo.php,我使用$_GET['bar'],是否可能会得到不同的结果,因为encodeURIComponentrawurlencode之间存在差异?

1 个答案:

答案 0 :(得分:1)

您只需要转义在代码中可以有特殊用途的字符。

例如,以下内容可用于要求代码进行数学比较或计算 - &LT; ,&gt; ,+, - ,/,=

然后是特定于URL创建的保留字符,例如 - ? ,@,%,#

字符!*'()没有特殊含义,所以不会被误解,所以不需要转义。但是,您可以不必要地转义字符,因此它可能看起来像一个不同的结果,但它意味着/做同样的事情。

这有更彻底的细分 - http://www.blooberry.com/indexdot/html/topics/urlencoding.htm