Safari会根据请求对已编码的URL进行编码

时间:2010-07-08 14:02:39

标签: encoding safari character-encoding

我在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&#229;r)。我可以通过URL解码参数来解决这些问题,然后再打印它。

Firefox甚至IE8处理这个问题。 这是WebKit中的错误还是我做错了什么?

总结一下:

  • 获取mysite.com/page.aspx?param=v%e5r
    HTML:<form method="post" action="page.aspx?param=v%u00e5r" id="aspnetForm" >
  • 发布mysite.com/page.aspx?param=v%25u00e5r
    HTML:<form method="post" action="page.aspx?param=v%25u00e5r" id="aspnetForm" >
  • 1 个答案:

    答案 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 argumentEncoding.UTF8?即。一个v%e5r,或者,如果你真的必须new Encoding(1252),{{1}}(Windows代码页1252,西欧)。