最近我遇到了一些与使用POST方法进行的
AJAX调用的字符编码相关的非常奇怪的行为.
为了简短说明,我有一个带有文本字段的 HTML表单,可以接受变音符号(例如“ä”).提交表单时,表单数据将被包装在一个 XML块中,并发送到一个将该信息存储在 MySQL数据库中的服务器.随后,从数据库中检索该信息,并将其显示给普通用户.
为了简短说明,我有一个带有文本字段的 HTML表单,可以接受变音符号(例如“ä”).提交表单时,表单数据将被包装在一个 XML块中,并发送到一个将该信息存储在 MySQL数据库中的服务器.随后,从数据库中检索该信息,并将其显示给普通用户.
如果请求是从Chrome或IE发送的,一切都很好.这意味着数据,包括变音符号,被发送,存储,然后检索和正确显示.但是,当我使用Firefox时,XML似乎正式提交表单数据,但是当我重新加载网页时,以前发送的变音符号不会出现.换句话说,他们似乎在途中迷路了.
例如,如果XML包含单词“tästä”,当我加载页面时,我看到“tst”.
为什么会发生这种情况? Firefox编码的邮件与IE和Chrome不同?
如果它有帮助,我已经附加了Chrome和Firefox的请求和响应标题,表单内容完全相同 – 只有一个示例:
顺便说一句,我不会在将数据发送到服务器之前对其进行编码,只需简单地检索表单字段的值即可.
铬:
XML数据块:
@H_301_16@<request> <session>{hidden by me}</session> <builder>Hem i Stan tästä</builder> </request>请求标头:
@H_301_16@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响应标题:
@H_301_16@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-EncodingFIREFOX:
XML数据块:
@H_301_16@<request> <session>{hidden by me}</session> <builder>Hem i Stan tästä</builder> </request>请求标头:
@H_301_16@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响应标题:
@H_301_16@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