0

根据https://stackoverflow.com/a/1734255/1529630encodeURIComponent与 相同rawurlencode,但!*'()没有转义,例如,

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

4

1 回答 1

1

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

例如下面可以用来要求代码做一个数学比较或计算 - < , > , + , - , / , =

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

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

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

于 2013-09-23T21:34:07.803 回答