0

我正在编写一个greasemonkey 脚本来为一个网页添加一些功能(很明显我无法更改服务器端的代码)。

这是一个非常古老的网站,只接收 GBK 编码的字符串。例如,当前网页中的表单有一个文本输入字段填充了值“中”(UTF-8字节流中的“\u4e2d”,“%E4%B8%AD”,GBK字节流中的%D6%D0) ,当用户点击提交按钮时,浏览器会自动将表单序列化为 application/x-www-form-urlencoded 文本然后发布到服务器。因为网页号称是GBK编码,所以“中”在application/x-www-form-urlencoded文本中自动编码为“%D6D0%”,然后服务端会用GBK编码解码得到正确的结果。

现在我切换到 ajax 将表单提交到服务器(大部分时间是 30~40 次),我使用 JQuery 的 serialize() 方法将表单序列化为 application/x-www-form-urlencoded 文本,然后发布它。问题是,jQuery的serialize方法最终使用encodeURIComponent对表单的所有值进行编码,此时“中”被编码为“%E4%B8%AD”,而不管当前网页的charset是GBK。服务端还是用GBK解码,然后就失败了。

我对此进行了很多搜索,encodeURIComponent 将始终将字符串编码为 utf-8 流,并且在 javascript 语言中没有实用功能可以做我想做的事情,即获取序列化的表单数据,就像浏览器会自动做的那样。

有任何想法吗?谢谢。

编写一个 firefox 插件并使用 c/c++ 代码实现 XPCOM 以进行从 javascript 字符串到 GBK 格式 url 编码字符串的转换怎么样?

4

0 回答 0