2013-09-23 2 views
0

Согласно https://stackoverflow.com/a/1734255/1529630, encodeURIComponent такая же, как rawurlencode, но !*'() не спасся, например,Имеет ли значение различное поведение между PHP `rawurlencode` и JS` encodeURIComponent`?

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'], можно ли получить разные результаты из-за разницы между encodeURIComponent и rawurlencode?

+1

вам не нужно кодировать эти символы в компонентах URL-адрес, поэтому JS не трогать их. если php анализирует правильные URL-адреса, либо должен работать ... – dandavis

ответ

1

Вам нужно только избежать символов, которые могут быть использованы в коде.

Например, можно использовать следующие просить код, чтобы сделать математическое сравнение или calcuation - <,>, +, -, /, =

то там зарезервированные символы, характерные для создания URL, такие как - ? , @,%, #

Символы! * '() Не имеют особого значения и поэтому не будут неверно истолковываться, поэтому не нужно экранировать. Однако вы можете избежать символов без необходимости, чтобы он мог выглядеть как другой результат, но это означало бы/делало бы то же самое.

Это более глубокое расстройство - http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

Смежные вопросы