javascript - 使用 Firefox 发送的 POST 请求中的字符编码问题

标签 javascript ajax firefox character-encoding

最近我遇到了一些非常奇怪的行为,这些行为与使用 POST 方法进行的 AJAX 调用的字符编码有关。 长话短说,我有一个 HTML 表单,其中的文本字段可以接受变音符号(例如“ä”)。提交表单时,表单数据被包装在一个 XML block 中并发送到服务器,该服务器将该信息存储在 MySQL 数据库中。随后,该信息将从数据库中检索并按原样显示给普通用户。

如果请求是从 Chrome 或 IE 发送的,则一切正常。这意味着数据(包括变音符号)被发送、存储、然后检索并正确显示。但是,当我为此使用 Firefox 时,XML 似乎可以正确提交表单数据,但是当我重新加载网页时,之前发送的变音符号不会出现。换句话说,他们似乎在途中迷路了。 例如,如果 XML 包含单词“tästä”,当我加载页面时我会看到“tst”。

为什么会这样? Firefox 对发布消息的编码是否与 IE 和 Chrome 不同?

如果有帮助,我附上了来自 Chrome 和 Firefox 的请求和响应 header ,对于完全相同的表单内容——只有一个例子:

顺便说一句,我没有在将数据发送到服务器之前对其进行编码,只是简单地按原样检索表单字段的值。

Chrome:

XML 数据 block :

<request>
<session>{hidden by me}</session>
<builder>Hem i Stan tästä</builder>
</request>

请求 header :

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:562
Content-Type:application/x-www-form-urlencoded
Cookie:PHPSESSID=rlne2d787j0np52ec5rtn04dm1
Host:83.150.87.220
Origin:http://hidden.by.me
Referer:http://http://hidden.by.me/?c=2094211
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
X-Requested-With:XMLHttpRequest

响应头:

Connection:Keep-Alive
Content-Encoding:gzip
Content-Type:application/xml
Date:Mon, 17 Sep 2012 16:21:58 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.2.11 (Win32) PHP/5.2.9-1
Transfer-Encoding:chunked
Vary:Accept-Encoding

FIREFOX:

XML 数据 block :

<request>
<session>{hidden by me}</session>
<builder>Hem i Stan tästä</builder>
</request>

请求 header :

Accept  */*
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection  keep-alive
Content-Length  562
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Cookie  PHPSESSID=kvfg4fp2trorllim19dmn241c7
Host    hidden.by.me
Referer http://hidden.by.me/?c=2094211
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1
X-Requested-With    XMLHttpRequest

响应头:

Connection  Keep-Alive
Content-Encoding    gzip
Content-Type    application/xml
Date    Mon, 17 Sep 2012 16:21:23 GMT
Keep-Alive  timeout=5, max=100
Server  Apache/2.2.11 (Win32) PHP/5.2.9-1
Transfer-Encoding   chunked
Vary    Accept-Encoding

最佳答案

正如@Pointy 前段时间提到的,问题与 Content-Type 有关。的 POST请求,因为 Firefox 似乎编码了 POST与其他浏览器不同的消息。 在我的脑海里,Data-TypeContent-Type是一样的,所以我没有意识到有必要指定 UTF-8作为两种情况下的字符编码标准。但是一旦我改变了 Content-TypeData-Type以及一个清晰的“text/xml; charset=UTF-8”,问题就解决了。

关于javascript - 使用 Firefox 发送的 POST 请求中的字符编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463800/

相关文章:

javascript - Angular2+ 如何显示日期的毫秒数?

javascript - Document.Domain 疯狂

jquery - 无法使用 JQuery 和 Ajax 访问 <form> 属性

javascript - 如何在 Firebug 中调试缩小的 JS?

python-3.x - Ctrl + t - 打开新标签在 Selenium + Firefox Python 中不起作用

javascript - 如何在一分钟后自动关闭 Bootstrap 模式对话框

javascript - 无法让 Angular-JS 在继续之前等待异步调用

javascript - 如何在 POST 上使用 Ajax 上传文件?

javascript - 使用 JavaScript 或 CSS 更改 iframe 的内容

jquery - FireFox 中使用 jQuery DataTables 时出现样式错误