[web] русские буквы в URL страниц
для страницы с адресом (точнее, с куском адреса) вида ф?q=ф дал в трёх браузерах три разных результата:странный результат может объясняться тем, например, что адрес ф?q=ф невалидный (и соответственно: браузеры на невалидный вход выдают невалидный результат)
а должен быть адрес: %D1%84?q=%D1%84
Вот тебе ещё пища для размышлений, создай другие страницы в разных кодировках (utf-8, windows-1251, koi8-r) на которых поставь ссылку на твою тестовую страницу и перейди по этой ссылке
посмотрел, нашел вот что
Для FF посмотри в about:config по слову encode
network.standard-url.encode-query-utf8;falseодно только не понимаю: почему он тогда запрос кодировует в CP1251? Нет бы вообще не кодировать.. А он кодирует.
И еще. Если в гугле набрать 'ф', а потом скопировать адрес страницы результатов в буфер обмена, то там 'ф' будет закодировано в utf-8. Почему установка из конфига не действует?
Из-за того, что на странице указана кодировка? Так ведь я тоже кодировку на странице указывал...
Да, я сейчас этим и занимаюсь.
создай другие страницы в разных кодировках
Допустим, я открываю Google и набираю в нём "ф". У меня вопрос: если я нажму на какую-либо ссылку из выдачи, то что я привезу на целевой сайт в referer?
q=ф или q=%D1%84 ? И для всех ли браузеров результат будет одинаковый?
Следует отметить, что адрес страницы результатов поиска в фаерфоксе и хроме выглядит как q=ф, а в IE6 - q=%D1%84
Тут всё осложняется еще и тем, что мне всю эту информацию (url страниц и refererы) нужно собирать со сторонних страниц javascriptовым счетчиком (навроде liveinternetовского который элементы document.URL и document.referer кодирует и пихает в GET-параметры, чтобы передать скрипту...
Если переходить по ссылкам, то в UTF-8 кодируется и адрес, и сам запрос.
Зачем только сделали опцию network.standard-url.encode-query-utf8 ?
По-моему, она только путаницу вносит...
В хроме всегда кодируется и адрес, и запрос.
Internet Explorer, сука, вообще не кодирует (это шестой; седьмой не знаю - говорят, кодирует всё).
Ну ладно, можно прогонять в любом случае через urldecode, чтобы исходные буквы получить (хотя это жесть, конечно) - если исходные буквы уже есть, то с ними ничего не будет, я так полагаю.
Firefox кодирует GET-запрос в CP-1251 только когда запрос вводится руками.у меня всегда utf-8, чяднт?
в части path закодировал как UTF-8, а в части query - как CP-1251Но это, на самом деле ничего, потому что не бывает в UTF-8 букв, начинающихся с 0xF, и любой демон с хотя бы семиклассным образованием с легкостью должен понять, что это восьмибитная кодировка...
и любой демон с хотя бы семиклассным образованием с легкостью должен понять, что это восьмибитная кодировка...но останется вопрос на два высших образования - а к какой code page - это восьмибитная кодировка относится?
FF 3.5.7
Opera 10.10
Chrome 4.0.295.0 (35884)
В какой-нибудь французской винде запрос закодируется в latin1
Тут писали:
у меня всегда utf-8, чяднт?
Для FF посмотри в about:config по слову encode
Вот именно!
и любой демон с хотя бы семиклассным образованием с легкостью должен понять, что это восьмибитная кодировка...но останется вопрос на два высших образования - а к какой code page - это восьмибитная кодировка относится?
Короче. Насколько я смог выяснить, картина такая:
Протестированы Chrome 4, FF 3.5, Opera 10.10 и IE6.0 (7 и выше не пробовал).
На предмет обращения с адресом страницы и со строкой referer'а.
IE 6 хранит адрес страницы (т.е. document.URL) в её кодировке (т.е. оставляет его без изменений).
Реферер отправляет в windows-1251 :0
urlencode не делается ни в каком случае.
Все остальные протестированные браузеры переводят часть path (т.е. до знака вопроса) referer'а в UTF-8, после чего весь его кодируют с помощью urlencode.
Chrome и Firefox точно так же хранят и сам адрес страницы.
Opera часть path оставляет без изменений в исходной кодировке страницы (и без urlencode часть query кодирует urlencode.
Это не на два высших образования, а на три автомата.
Оставить комментарий
tihon972009
Что-то я запутался с URL, содержащими русские буквы...типа вот таких:
ru.wikipedia.org/wiki/Заглавная_страница
Да, читал про кодирование нелатинских символов в URL.
Вместе с тем, складывается впечатление, что каждый браузер обращается с адресами страниц по-разному: один кодирует, второй не кодирует, третий недокодирует.
Вот такой несложный код:
для страницы с адресом (точнее, с куском адреса) вида ф?q=ф дал в трёх браузерах три разных результата:
Причем эти результаты от заданной кодировки никак не зависят, являясь, по-видимому, внутренним свойством браузера.
Особенно порадовал фаерфокс. Который символы в части path закодировал как UTF-8, а в части query - как CP-1251 (вообще полный привет, по-моему).
Есть ли цивилизованные средства, которые позволяют привести это к единому виду?