我遇到encodeURIComponent()
问题,因为它的行为似乎与浏览器不同(使用Chrome和Firefox测试):
encodeURIComponent('ä')
返回%C3%A4
escape('ä')
返回%E4
ä
编码为%E4
那么,为什么encodeURIComponent
的行为与所有其他(主要是浏览器)不同?这实际上会导致问题,因为有些网站不明白我想要提供什么。有问题的网站是http://verkkopalvelu.vrk.fi/Nimipalvelu/default.asp?L=1(点击“Etunimihaku”,因为它是iframe)。
encodeURIComponent
是否已被破坏,如何纠正这种情况?编码像ä ö å
这样的字符的正确方法是什么? escape()
似乎与这些浏览器编码相同,但不推荐使用escape()
。
我使用Fiddler测试了浏览器,并且在我提交表单时,控制台/网络选项卡也将编码显示为%E4
。此处还有一个测试链接:A http://jsfiddle.net/tcyfktvg/1/
答案 0 :(得分:3)
encodeURIComponent()
没有被打破。它使用UTF-8字符集对字符进行编码。总是。 (ECMAScript 3rd Edition (ECMA-262)第82页)
escape()
使用Unicode进行编码(ECMAScript 1st Edition (ECMA-262)第60页)。如果unicode代码是< 256然后使用简单的双字母表示,如“ä”所示。如果unicode代码是> = 256,则使用具有前导“u”的扩展四字符表示。示例:escape("겧") == "%uACA7"
。
当http服务器收到编码的URL时出现问题。它必须解码它。但URL本身并不能说明使用哪种编码来创建它。
此网址:http://server/%C3%A4
如果http://server/ä
由encodeURIComponent()
编码(使用UTF-8),则可以是http://server/ä
,但它也可以是由escape()
编码的encodeUriComponent("ä") == "%C3%A4"
escape("ä") == "%C3%A4"
{1}}(使用Unicode):
function init() {
$('#test').on('click', function() {
$('.answer').animate({
width: '1px',
opacity: 0
}, 2000, "swing");
});
}
服务器的配置取决于它将用于解码URL的编码。所以这里是你的问题的解决方案:知道http服务器所期望的URL,并选择合适的编码方法。