2011-10-23 58 views
2

我已经创建了搜索操作Web表单在我的项目之一,而HTML是非常简单的:IE发送?字符而不是Unicode字符在HTTP GET

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

所以,当用户输入Unicode的搜索词,命中输入,一个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 

并且我能够使用HttpContext.Current.Server.UrlDecode("%D9%85%D8%AB%D8%A7%D9%84")检索search-term查询字符串的解码值,该字符串返回给我مثال。直到这里一切正常,我没有问题。

但是,如果有人直接键入在IE9上述地址,并按下回车键,然后我得到的服务器是:

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

有什么不对吗?

更新:我们通过提琴手检查流量,你可以看到结果在下面的图片:

HTTP GET头,由小提琴手,与Firefox要求捕获 HTTP Get headers, captured by Fiddler

HTTP GET头,通过捕获提示与IE HTTP Get headers, captured by FiddlerHTTP Get headers, captured by Fiddler

+0

在HTML中混合单引号和双引号...为什么这么草率? –

+0

不@ @ MattBall,这是我在这里写的。但你是对的。单一方法效果更好。 Viva一致性! –

+0

谁说这是IE9?你有没有使用Fiddler或什么来捕捉IE发送的内容,也许你的服务器不理解请求。 –

回答

4

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