Firefox странное преобразование одинарных кавычек в URL-адресах

#javascript #firefox #url-encoding

#javascript #firefox #url-кодировка

Вопрос:

Кто-нибудь знает, почему FF кодирует одинарные кавычки ' в ' ?

Предполагается, что одинарная кавычка является допустимым символом в URL-адресах. На самом деле все другие браузеры IE7 / IE8 / Chrome5 / Safari4 хорошо работают, НЕ кодируя одинарные кавычки в ‘.

Это ошибка FF, или это я что-то упускаю?

Я тестирую с помощью FF3.6.1

Для упрощения тестирования просто добавьте это в yourpage.html

 <script type="text/javascript">
    window.alert("this url = "   window.location.href);
</script>
  

Затем перейдите к yourpage.html?test=quote'encoded

FF не заменит URL-адрес в адресной строке, но он отобразит:

 yourpage.html?test=quote'encoded
  

Все другие браузеры будут отображать

 yourpage.html?test=quote'encoded
  

Спасибо!

Ответ №1:

Firefox 4 (на Ubuntu) также избегает одинарных кавычек.

Оба Chromium 11.0.696.57 и Google Chrome 12.0.742.16 этого не делают!

Однако следует отметить, что все символы могут быть закодированы. Это законно для кодирования URL-адреса A , если кто-то хочет и это должен быть именно эквивалентно использованию A непосредственно в URL-адрес, поэтому ваш код должен быть в состоянии обрабатывать обе версии.

Из RFC 1738:

С другой стороны, символы, которые не требуется кодировать (включая буквенно-цифровые символы), могут быть закодированы в части URL, зависящей от схемы, при условии, что они не используются для зарезервированной цели.

Комментарии:

1. 1, особенно когда вы говорите it should be noted that all characters may be encoded...so your code should be able to handle both versions .

2. @Joachim Sauer: таким образом, компонент url также может быть полностью закодирован в URL, но amp; никогда не должен переводиться в amp;amp , таким образом, этот URL должен быть действительным, url?key1='quote'amp;key2=val в то время как этот должен быть НЕДЕЙСТВИТЕЛЬНЫМ: url?key1='quote'amp;amp;key2=val Я прав?

3. Я не уверен, что это недопустимо (потому что ; зарезервировано в соответствии с RFC 1738, но не имеет особого значения в RFC 2616), но это определенно не то, что было задумано, поскольку это бы означало, что ключу amp;key2 было присвоено значение val .

4. @Joachim Sauer: Я думаю, amp;amp; это недопустимо, потому что в PHP, если вы вызываете $_GET['key2'] по URL url?key1='quote'amp;amp;key2=val , вы получаете NULL

5. @Marco: и что у тебя получается $_GET['amp;key2'] ?