为什么浏览器使用ajax请求对特殊字符进行不同的编码?

时间:2012-06-18 09:12:37

标签: jquery ajax character-encoding

我有一个Web应用程序,它读取几个输入字段(字母数字)的值,并使用jQuery的$ .ajax()方法构造一个传递给服务器的非常简单的xml。 该xml的模板是:

<request>
    <session>[some-string]</session>
    <space>[some-string]</space>
    <plot>[some-string]</plot>
    ...
</request>

当输入包含芬兰变音字符(例如äö)时,向服务器发送此类请求会引发使用不同浏览器进行字符编码的问题。例如,如果我在其中一个输入中添加“strong>Käyttötarkoitus”这个词,那么Chrome和Firefox将如何向服务器发送完全相同的请求:

铬:

<request>
    <session>{string-hidden}</session>
    <space>2080874</space>
    <plot>Käyttötarkoitus</plot>
    ...
</request>

FF 12.0:

<request>
    <session>{string-hidden}</session>
    <space>2080874</space>
    <plot>Käyttötarkoitus</plot>
    ...
</request>

以下是我用来发送请求的代码片段:

$.ajax({ 
    type: "POST", 
    url: url,
    dataType: 'xml;charset=UTF-8',
    data: xml, 
    success: function(xml) { 
        //
    },
    error: function(jqXHR, textStatus, errorThrown) {
        //
    }
});

为什么我会得到不同的编码,如何摆脱这种差异?我需要解决这个问题,因为它在服务器端引起了其他问题。

2 个答案:

答案 0 :(得分:0)

在dataType上,尝试使用“application / xml”或“text / xml”而不是“xml; charset = UTF-8”

答案 1 :(得分:0)

使用encodeURI编码uri ..你也必须在服务器中解码它。我有同样的问题。我正在寻找更好的选择,因为encodeURI也对日期字段进行编码