Angularjs请求编码和坏字符(在FF工作正常)

时间:2012-07-12 12:11:50

标签: character-encoding http-headers xmlhttprequest angularjs

我根据浏览器对请求的编码有一些问题。

以下转储显示FF和Chrome之间不同的标头(我删除了所有相同的标头)。请参阅“搜索”值的表示:

Firefox:好的

Accept-Language: es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/json;charset=utf-8

POST: {"data":{"size":10,"search":"José","order":"name","page":1}}

Chrome:不行

Pragma: no-cache
Cache-Control: no-cache
Origin: http://localhost
Content-Type: application/json;charset=UTF-8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es-ES,es;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

POST: {"data":{"size":10,"search":"José","order":"name","page":1}}

IE无效

我试图在$ http中强制使用Content-Type,但没有。两个浏览器中的响应都正常。我正在使用Apache而不是Win 7“por si las moscas”。

重要提示:请求在发送到服务器之前格式不正确,上面的标题我将从Firebug和Chrome中检查。

有什么想法吗?谢谢!

更新

我将url编码到帖子,并在服务器中解码,我注意到使用UTF-8 url解码工作不好,但ISO-8859-1工作正常。然后浏览器发送带有ISO-8859-1的帖子?

1 个答案:

答案 0 :(得分:0)

根据w3 spec,如果未指定任何内容或没有ISO-8859-1标头,则charset Accept-Charset是默认值。很可能其他的字符集会把事情搞砸了。

尝试取消定义标题:

$http({
   method: 'POST',
   url: '/page.html',
   headers: { 'Accept-Charset': undefined }
})
.success(function(){ /*success fn here*/  });