我有一个问题,encodeURIComponent()
因为它似乎与浏览器不同(使用Chrome和Firefox测试):
encodeURIComponent('ä')
回报 %C3%A4
escape('ä')
回报 %E4
ä
以x-www-form-urlencoded格式编码为%E4
那么,为什么encodeURIComponent
表现与其他所有(主要是浏览器)不同?这实际上会导致问题,因为有些网站不明白我想要提供什么.有问题的网站是http://verkkopalvelu.vrk.fi/Nimipalvelu/default.asp?L=1(点击"Etunimihaku",因为它是基于iframe).
被encodeURIComponent
破坏了,应该如何纠正这种情况?编码字符的正确方法是ä ö å
什么?escape()
似乎编码与那些浏览器相同,但escape()
不推荐使用.
我使用Fiddler测试了浏览器,并且控制台/网络选项卡显示了%E4
我提交表单时的编码.这里还有一个测试链接:http://jsfiddle.net/tcyfktvg/1/
encodeURIComponent()
没有坏。它使用 UTF-8 字符集对字符进行编码。总是。(ECMAScript 第三版 (ECMA-262)第 82 页)
escape()
使用 Unicode 进行编码(ECMAScript 第一版 (ECMA-262)第 60 页)。如果 unicode 代码小于 256,则使用简单的两个字母表示,如“\xc3\xa4”所示。如果 unicode 代码 >= 256,则使用带有前导“u”的扩展四字符表示形式。例子:escape("\xea\xb2\xa7") == "%uACA7"
。
当 http 服务器收到编码的 URL 时,就会出现问题。它必须对其进行解码。但 URL 本身并不能说明创建它时使用的是哪种编码。
\n\n此 URL:如果它是通过(使用 UTF-8)编码的,则http://server/%C3%A4
可以是 a ,但它也可以是通过(使用 Unicode)编码的:http://server/\xc3\xa4
encodeURIComponent()
http://server/\xc3\x83\xc2\xa4
escape()
encodeUriComponent("\xc3\xa4") == "%C3%A4"\nescape("\xc3\x83\xc2\xa4") == "%C3%A4"\n
Run Code Online (Sandbox Code Playgroud)\n\n这取决于服务器的配置,它将使用哪种编码来解码 URL。因此,这就是您问题的解决方案:了解 http 服务器需要哪种 URL 编码并选择适当的编码方法。
\n 归档时间: |
|
查看次数: |
644 次 |
最近记录: |