我在Safari中使用以下URL对页面执行HTTP GET请求:
mysite.com/page.aspx?param=v%e5r
该页面包含一个回复自身的表单。
当asp.net输出时,HTML表单标签看起来像这样:
<form method="post" action="page.aspx?param=v%u00e5r" id="aspnetForm" >
当Safari将其发回时,它会以某种方式将此URL转换为:
page.aspx?param=v%25u00e5r
,即URL对已经URL编码的字符串进行编码,然后对其进行双重编码,并且此参数生成的输出为乱码(vår
)。我可以通过URL解码参数来解决这些问题,然后再打印它。
Firefox甚至IE8处理这个问题。 这是WebKit中的错误还是我做错了什么?
总结一下:
mysite.com/page.aspx?param=v%e5r
<form method="post" action="page.aspx?param=v%u00e5r" id="aspnetForm" >
mysite.com/page.aspx?param=v%25u00e5r
<form method="post" action="page.aspx?param=v%25u00e5r" id="aspnetForm" >
答案 0 :(得分:2)
mysite.com/page.aspx?param=v%e5r
虽然可以在URL的查询部分中使用UTF-8以外的编码,但这是不可取的,并且通常会混淆各种假设为UTF-8的脚本。
您真的希望在标记为UTF-8的页面中生成表单,然后在您的应用程序中接受UTF-8并将字符串vår
(假设这是您的意思)编码为param=v%C3%A5r
。
page.aspx?param=v%u00e5r
亲爱的,亲爱的!那是非常错的。 %uXXXX
仅限JavaScript - escape()
- 样式序列;放入URL完全无效。 Safari可能是通过对%
进行编码来解决错误,而%25
后面跟不是带有<form>
的两位十六进制序列。
ASP.NET是否会生成此内容?如果是这样,那是非常令人失望的。你是如何创建HttpUtility.UrlEncode
标签的?如果您手动编码参数,可能需要specify an Encoding
argument到Encoding.UTF8
?即。一个v%e5r
,或者,如果你真的必须new Encoding(1252)
,{{1}}(Windows代码页1252,西欧)。