#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']
по URLurl?key1='quote'amp;amp;key2=val
, вы получаетеNULL
5. @Marco: и что у тебя получается
$_GET['amp;key2']
?