我在我的一个项目中创建了一个用于搜索操作的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获取由Fiddler捕获的标头,用IE请求
答案 0 :(得分:5)
IE手动输入URL时不知道您要使用哪个字符集,因此必须使用默认字符集。当Unicode字符转换为不支持这些Unicode字符的Ansi字符集时,会出现?
个字符。在提交网络表单时,IE使用网络表单的字符集,可以由<form>
标记本身,HTML文档中的<meta>
标记或HTTP Content-Type
标题指定,因此,IE必须猜测使用正确的字符集的可能性较小。