IE отправляет?символ вместо символов Юникода в HTTP GET - PullRequest
2 голосов
/ 23 октября 2011

Я создал веб-форму для операции поиска в одном из моих проектов, и HTML-код довольно прост:

<form action='/search' method="post">
    <input type="text" id='search-term' name='search-term' />
    <input type="submit" id='start-search' alt='' value="" />
</form>

Итак, когда пользователь вводит поисковый термин Unicode и нажимает Enter, HTTP Getзапрос будет отправлен на сервер с этим URL:

http://www.example.com/search?search-term=مثال

Это на сервере будет:

http://www.example.com/search?search-term=%D9%85%D8%AB%D8%A7%D9%84

, и я смогу получить декодированное значение search-term строка запроса с использованием HttpContext.Current.Server.UrlDecode("%D9%85%D8%AB%D8%A7%D9%84"), которая возвращает мне مثال.До сих пор все работает нормально, и у меня нет проблем.

Однако, если кто-то введет вышеупомянутый адрес непосредственно в IE9 и нажмет Enter, то я получу на сервере:

http://www.example.com/search?search-term=????

Что здесь не так?

Обновление: мы проверили трафик через Fiddler, и вы можете увидеть результат на следующих рисунках:

HTTP Получить заголовки, захваченные Fiddler, запрошенные у Firefox HTTP Get headers, captured by Fiddler

HTTP Получить заголовки, захваченные Fiddler, запрошенные с помощью IE HTTP Get headers, captured by Fiddler

1 Ответ

5 голосов
/ 26 октября 2011

IE не знает, какую кодировку вы хотите использовать при вводе URL-адреса вручную, поэтому он должен использовать кодировку по умолчанию. ? символы появляются, когда символы Unicode конвертируются в кодировку Ansi, которая не поддерживает эти символы Unicode. При отправке веб-формы вместо этого IE использует кодировку веб-формы, которая может быть указана самим тегом <form>, в тегах <meta> в документе HTML или заголовке HTTP Content-Type, поэтому вероятность того, что IE должен угадать правильный набор символов для использования.

...