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

标签 javascript http character-encoding xmlhttprequest greasemonkey

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

理论上这不是问题 - 我迭代所有表单字段,对值使用encodeURIComponent 函数并将所有内容连接到发布请求正文。然而。 encodeURIComponent 函数始终根据 UTF-8 对字符进行编码,这会导致各种问题。因为 PHP 似乎没有正确地重新编码我对 windows-1250 的请求,所以它会误解多字节字符串,并得出结论:重新提交的值比允许的 40 个字符长,所以我就死掉了。或者脚本只是默默地死掉,没有给我任何有用的反馈。

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

Zajišťujeme profesionální modelky

当由encodeURIComponent编码时,如下所示:

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

在 PHP(windows-1250 中的源文本)或 Firefox 中使用 urlencode 时,效果相同:

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

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

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

最佳答案

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

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

关于javascript - Greasemonkey 与需要 windows-1250 编码的服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845804/

相关文章:

javascript - REST API 与 Postgresql - 如何制作最简单的前端界面

ruby-on-rails - 如果我使用域名而不是 ip 地址,http 请求需要时间

php - 更改编码后 MySQL 抛出错误

javascript - 如何优化多个文件的输出 typescript 中的模块 namespace ,使用 gulp

javascript - req.body 没有出现在 postman 中

apache - HTTP POST 中的各个字段是否有大小限制?

javascript - 如何解决这个字符编码问题?

javascript - 在 Firebase 中通过 id 获取特定对象/项目

c# - 如何发送表情符号?