Javascript Greasemonkey与需要windows-1250编码的服务器的通信

Javascript Greasemonkey与需要windows-1250编码的服务器的通信,javascript,http,character-encoding,xmlhttprequest,greasemonkey,Javascript,Http,Character Encoding,Xmlhttprequest,Greasemonkey,我正在开发一个greasemonkey插件,该插件应该在后台使用POST(GM_xmlhttpRequest)在不受我控制的应用程序上发送表单。该应用程序是用PHP编写的,似乎希望它的所有输入都使用windows-1250编码。我需要做的是将所有表单字段保持原样,只编辑其中一个,然后重新提交。有些字段使用重音字符,长度有限 理论上没有问题-我迭代所有表单字段,对值使用encodeURIComponent函数,并将所有内容连接到post请求主体。然而。encodeURIComponent函数总是根

我正在开发一个greasemonkey插件,该插件应该在后台使用POST(GM_xmlhttpRequest)在不受我控制的应用程序上发送表单。该应用程序是用PHP编写的,似乎希望它的所有输入都使用windows-1250编码。我需要做的是将所有表单字段保持原样,只编辑其中一个,然后重新提交。有些字段使用重音字符,长度有限

理论上没有问题-我迭代所有表单字段,对值使用encodeURIComponent函数,并将所有内容连接到post请求主体。然而。encodeURIComponent函数总是根据UTF-8编码字符,这会导致各种问题。因为PHP似乎没有正确地重新编码我对windows-1250的请求,所以它错误地解释了多字节字符串,并得出结论,重新提交的值超过了允许的40个字符,并且在我身上消失了。或者剧本只是静静地死去,没有给我任何有用的反馈

我通过查看firefox在浏览器窗口中提交表单时发送的帖子正文,然后使用xhr将相同的数据重新发送到服务器来测试这一点。这起作用了。例如,字符串:

Zajiťujeme Professionaálnímodelky

使用encodeURIComponent编码时,如下所示:

Zaji%C5%A1%C5%A5ujeme%20profession%C3%A1ln%C3%AD%20modelky

在PHP(windows-1250中的源文本)或Firefox中使用urlencode也是一样的:

Zaji%9A%9Dujeme+profession%E1ln%ED+modelky

显然,我需要像在windows-1250中一样对帖子正文进行编码,或者以某种方式使服务器接受utf-8(我怀疑这是可能的)。我尝试了各种其他函数,比如escape或encodeURI,但是输出没有太大的不同——所有的输出似乎都是utf-8


有什么办法可以解决这个问题吗?

让浏览器对表单进行编码。将它放在一个隐藏的iframe中,并调用submit()。

另一种让Firefox对URL进行编码的方法是将其设置为链接的href。属性(而不是属性)将始终作为页面编码中编码的绝对链接URLCoded读回


对于GET请求,只需将href设置为
http://server/cgi?var=value
并读回编码表单。对于POST请求,您必须采取额外的步骤来分离数据(您不能单独使用
?var=value
,因为链接作为绝对链接读回)。

我自己,实际上我认为唯一的方法是在服务器上重新编码,在那里对其进行URL编码,然后发送回客户端脚本以发送到外部网站。我希望被证明是错的。如果我这样做,我能在提交完成时收到通知吗?提交时返回的页面需要通知您。