Ответ 1
Указывает ли стандарт HTTP или что-то определенное кодирование на специальных символах до того, как они будут закодированы в URL-адресе с% XXs?
Стандарт HTTP, №. Но другой стандарт, IRI, может вступить в игру.
URI представляют собой явно (один раз% -декодированные) байтовые последовательности. Какие символы Юникода, на которые наложены эти байты, не указываются стандартом URI или стандартом HTTP для URI http: -схемы.
В частности, для параметров запроса: веб-браузеры будут использовать кодировку исходной страницы, чтобы сделать отправку формы GET URL, поэтому, если у вас есть страница в ISO-8859-1, и вы помещаете 'é в поле поиска, вы будете get '? search =% E9, но если вы сделаете то же самое на странице, кодированной как UTF-8, вы получите'? search =% C3% E9. Если вы не подадите страницу своей формы с какой-либо конкретной кодировкой, браузер угадает, чего вы не хотите, так как это не позволит догадаться, в каком формате будет отправляться представление.
Для других частей URL-адреса браузер не будет генерировать их самостоятельно, но если вы укажете его в не-ASCII-символах в ссылках, он обычно кодирует их как UTF-8. Это ненадежно, так как это зависит от настроек браузера и локали, поэтому лучше не использовать это на данный момент.
Стандарт, который правильно позволяет использовать символы, отличные от ASCII, в ссылках IRI. IRI конвертирует в URI UTF-8 -% - кодирует большую часть URL-адреса, но вместо этого имя хоста преобразуется с помощью Punycode. Для совместимости лучше не полагаться на браузеры, понимающие IRI в ссылках. Вместо этого UTF-8-then-% - кодирует ваш путь и символы параметров самостоятельно. Они по-прежнему будут отображаться как правильные символы в адресной строке в современных браузерах; к сожалению, IE не будет отображать форму IRI декодированного символа во всех случаях, в зависимости от языковых настроек.
IRI Wiki для греческого гамма-символа:
http://en.wikipedia.org/wiki/Γ
Закодировано в URI, это:
http://en.wikipedia.org/wiki/%CE%93