如何强制XMLHttpRequest仅使用ISO-8859-1 charset?

时间:2012-08-10 18:00:27

标签: javascript ajax encoding

我有ISO-8859-1数据库,所以我想在这个代码页中完全交换请求。那么,如何以正确的方式为AJAX请求设置内容类型?

3 个答案:

答案 0 :(得分:2)

尽管这样做很糟糕(上面的一堆评论),但这可行:

var xhr = new XMLHttpRequest(); 
xhr.open("GET", path, false);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=ISO-8859-1')

如果您使用的是jQuery:https://stackoverflow.com/a/553572/2527433

答案 1 :(得分:1)

根据XMLHttpRequest.send()的W3C规范,几乎在所有情况下,字符集最终都将成为UTF-8,具体取决于 data 的值。即使您指定的任何字符集编码也可能会被UTF-8覆盖:

  

如果Content-Type标头位于作者请求标头中,并且其值是具有charset参数的有效MIME类型,该参数的值不是 encoding 的不区分大小写的匹配项,并且 encoding 不为null,将该Content-Type标头的所有charset参数设置为 encoding

用户代理有一些摆动空间来确定编码:将包含AJAX的页面的编码设置为ISO-8859-1。然后,UA将对所有表单提交采用ISO(除非表单另有指定不同的编码),并且可能是AJAX提交,具体取决于对W3C算法的解释。

最终,唯一可靠的解决方案是将访问者看到的页面(使用AJAX)设置为ISO-8859-1,然后确保检查它并在后端转换为ISO(你< strong>需要在将所有用户输入发送到数据库之前对其进行消毒,因此只需将此转换添加到流程中即可。有很多库函数可以用PHP或您的语言来完成。否则无法保证与规范的一致性,所以绝对检查/确保后端的编码。

答案 2 :(得分:0)

我想我需要解释编码和charset参数。这些关注原始字节如何 通过网络发送应该被解码。

例如,请考虑内容类型application/x-www-form-urlencoded和以下数据:

0x61253344254345254232

因为没有字符集(事实上,charset是此内容类型的非法参数...)ISO-8859-1 必须假设。因此,在ISO-8859-1中解码上述结果:

"a%3D%CE%B2"

现在还有另一种解码格式(表单urlencoded),它有自己的规则。 The current specs say that the percent encoding here must be UTF-8,所以做完 string - &gt;你得到的字符串转换 从上面:

"a=ß"

正如您所看到的,格式从不使用ASCII以外的字符,因此字符集并不重要 反正不支持。


您的实际问题与百分比编码使用的编码无关。即使您定义了百分比编码的自定义函数 在ISO-8859-1中,服务器仍然必须在到达时对其进行解码并对数据库进行编码。你有 没法从中获益。