http://mywebsite.com/service.asmx/foo?param1=123¶m2=מחרוזתבעברית
对我来说,IE10与其他(普通)浏览器不同,不会对查询字符串参数进行编码 – 每个非ansi字符都会随后发生.标记将被转为’3f’字节,尽管它确实编码了什么?标记 – 网址本身.
例如,如果我尝试达到url(参数是虚构的,url不是,我没有与该网站的连接)
http://www.shlomo.co.il/pageshe/sales/רכב-למכירה.asp?param=פאראם
然后在wireshark看我发送到服务器的字节,它显示了我
您可以看到它用urlencoded字符串替代了URL的希伯来语部分,但用“3f”代替了希伯来语参数.
chrome中的相同字符串将被编码为全部:
GET http://www.shlomo.co.il/pageshe/sales/%D7%A8%D7%9B%D7%91-%D7%9C%D7%9E%D7%9B%D7%99%D7%A8%D7%94.asp?param=%D7%A4%D7%90%D7%A8%D7%90%D7%9D HTTP/1.1
我在win7 / IE10和winXPheb / IE8的机器上尝试过.
我的IE设置(特别是选中“始终显示编码的地址选项”,看是否有帮助和重新启动,但没有任何区别)
我试图搜索关于问题的任何信息,但没有找到很多.
我的问题是:
这是真的吗,还是我错过了什么?
这个行为是否记录在任何地方?
> IE / Win中是否有任何设置可以启用参数编码.
附:如果我正在开发客户端/网络ui,我只是urlencode我的查询,但我的客户请求正是将查询粘贴到IE地址栏,这就是为什么我对这个具体行为感兴趣.
谢谢.
解决方法
“始终显示编码地址选项”涉及PunyCode是否显示为IDN主机名,并且不会影响查询字符串.发送UTF-8 URL主要适用于路径的编码,尽管它也可能影响其他的编程
行为没有完全记录在任何地方.我想在IEInternals博客上写一个完整的帖子,但是在这样做之前最终还是从微软开始. this blog post有部分解释.
是的,有影响行为的设置.在工具>中发送UTF-8 URL复选框互联网选项>高级是确定URL发送方式的变量之一,但是该选项并不会盲目地执行它的意思(只有UTF-8编码路径,而不是查询字符串).涉及的其他变量包括:
> URL的输入地址(例如地址栏对开始>运行等)
>系统的ANSI代码页是什么(例如,操作系统默认使用的语言环境)
>浏览器中当前加载的页面的字符集
作为这些变量的结果,您无法在Internet Explorer中可靠地使用未正确编码的URL(例如,%转义的UTF8).