#browser #unicode #internet-explorer-9
#браузер #юникод #internet-explorer-9
Вопрос:
Я создал веб-форму для поиска в одном из своих проектов, и HTML-код довольно прост:
<form action='/search' method="post">
<input type="text" id='search-term' name='search-term' />
<input type="submit" id='start-search' alt='' value="" />
</form>
Итак, когда пользователь вводит поисковый запрос в Юникоде и нажимает Enter, HTTP Get запрос будет отправлен на сервер с этим URL:
http://www.example.com/search?search-term=مثال
Это на сервере будет:
http://www.example.com/search?search-term=مثال
и я могу получить декодированное значение строки search-term
запроса, используя HttpContext.Current.Server.UrlDecode("مثال")
которое возвращается مثال
ко мне. Пока здесь все работает нормально, и у меня нет проблем.
Однако, если кто-нибудь введет вышеупомянутый адрес непосредственно в IE9 и нажмет Enter, то на сервере я получаю:
http://www.example.com/search?search-term=????
Что здесь не так?
Обновление: мы проверили трафик через Fiddler, и вы можете увидеть результат на следующих рисунках:
Заголовки HTTP Get, захваченные Fiddler, запрошенные с помощью Firefox
Заголовки HTTP Get, захваченные Fiddler, запрошенные с помощью IE
Комментарии:
1. Смешивание одинарных и двойных кавычек в HTML … почему так неаккуратно?
2. Нет @MattBall, это то, что я написал здесь. Но вы правы. Единый подход работает лучше. Да здравствует согласованность!
3. Кто сказал, что это IE9? Вы использовали Fiddler или что-то еще для захвата того, что отправляет IE, возможно, ваш сервер не понимает запрос.
4. Я использовал Firebug, чтобы увидеть, что отправляет IE, и в Firebug все в порядке. Но на сервере (в самой начальной точке или context_BeginRequest) символы такие же, как
????
.5. Хорошо, ваш вопрос должен быть «HTTP-сервер и символы Юникода»
Ответ №1:
IE не знает, какую кодировку вы хотите использовать при вводе URL вручную, поэтому он должен использовать кодировку по умолчанию. ?
символы возникают, когда символы Юникода преобразуются в кодировку Ansi, которая не поддерживает эти символы Юникода. При отправке веб-формы вместо этого IE использует кодировку веб-формы, которая может быть указана самим <form>
тегом, в <meta>
тегах в HTML-документе или Content-Type
в заголовке HTTP, поэтому меньше шансов, что IE должен угадать правильную кодировку для использования.