IE发送? HTTP GET中的字符而不是Unicode字符

时间:2011-10-23 05:21:21

标签: browser unicode internet-explorer-9

我在我的一个项目中创建了一个用于搜索操作的Web表单,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键时,将使用此URL将HTTP Get请求发送到服务器:

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 个答案:

答案 0 :(得分:5)

IE手动输入URL时不知道您要使用哪个字符集,因此必须使用默认字符集。当Unicode字符转换为不支持这些Unicode字符的Ansi字符集时,会出现?个字符。在提交网络表单时,IE使用网络表单的字符集,可以由<form>标记本身,HTML文档中的<meta>标记或HTTP Content-Type标题指定,因此,IE必须猜测使用正确的字符集的可能性较小。