我有以下xml文件:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<root>
<branch>
<name>Ale Torg</name>
<address>Ale Torg</address>
<city>NÖDINGE</city>
<phone>0303- 336730</phone>
<clnr>6854</clnr>
<open>må-on 10-16, to 10-18, fr 10-16</open></branch>
<branch>
<name>Alfta</name>
<address>LÅNGGATAN 59</address>
<city>ALFTA</city>
<phone>0271-61960</phone>
<clnr>6402</clnr>
<open>må 9-17, ti-on 9-15, to 9-17, fr 9-15</open>
</branch>
<branch>
<name>Alingsås</name>
<address>Kungsgatan 24</address>
<city>ALINGSÅS</city>
<phone>0322-667280</phone>
<clnr>6832</clnr>
<open>må 10-18, ti-on 10-15, to 10-18, fr 10-15</open>
</branch>
<branch>
<name>Alvesta</name>
<address>Centralplan</address>
<city>ALVESTA</city>
<phone>0472-267760</phone>
<clnr>6679</clnr>
<open>må-on 10-15, to 10-18, fr 10-15</open>
</branch>
</root>
以下js解析它:
function encodeSwedishChars(data)
{
data = data.replace(/å/g, '%E5');
data = data.replace(/ä/g, '%E4');
data = data.replace(/ö/g, '%F6');
data = data.replace(/Å/g, '%C5');
data = data.replace(/Ä/g, '%C4');
data = data.replace(/Ö/g, '%D6');
data = data.replace(/é/g,'%E9');
data = data.replace(/É/g, '%C9');
return data;
}
function addAutoComplete()
{
//Use datatype TEXT so jquery doesnt parse it.
var officeNames = [];
$.ajax({
url: "offices2.xml",
dataType: "text",
type: "GET",
success: function(xml)
{
xml = xml.encodeSwedishChars();
xml = $.parseXML(xml);
var names = $(xml).find("branch").each(function(){
var text = $(this).find('name').text();
officeNames.push(text);
var office = {};
office.name = text;
office.clnr = $(this).find("clnr").text();
namesAndClnr.push(office);
});
}
});
$( "#guide-lastpage-form-p9" ).autocomplete({
source: officeNames,
})
}
代码在我测试的所有浏览器中都能正常运行,但在Internet Explorer 9中却没有... 我收到以下错误:
SCRIPT5022 Invalid XML: <?xml version=1.0" encoding="ISO-8859-1" ?>
jquery.min.js, line 4 character 4106
XML5617: Illegal XML character
, line 3 characther 66 (This is the letter Ö the first branch, city, Nödinge)
我无法更改XML文件中的任何内容,因为我无权访问它,offices2.xml只是一个测试文件,其数据与我在实际网站上收到的数据完全相同。
为什么这不起作用?我认为我的escapeSwedishChars方法会修复它吗?
我无法访问XML文件,因此我无法更改编码为UTF-8
答案 0 :(得分:1)
(免责声明:虽然这个问题不是一个完整的答案,但是把它作为评论太长了,我相信这些信息可以节省时间给别人,所以我把它作为答案。怜悯downvotes!)
微软的解决方案巨大的BUG 就是这样:
在XML处理指令中指定正确的编码方案。
- 或 -
将XML数据重新编码为正确的UTF-8。
来源:http://support.microsoft.com/kb/238833
不幸的是,第二个让我们说“解决方案”在大多数情况下都不适用,并且在我们只通过Ajax请求信息的大多数环境中,第一个选项都没用。
就我而言,我发现了两种不同的不良行为,具体取决于我用来请求数据的对象。当我使用XMLHttpRequest时,生成的responseText已经损坏(当然,responseXML是未定义的)并且与它几乎没有关系。
但是,我已经设法通过使用XDomainRequest对象(不应该用于此目的)来发出请求,但至少responseText仍然可读。不幸的是,所有非ASCII字符的char值都设置为65533,这是不可打印字符的代码,因此我能够实现的最好的方法是读取它们并替换某些特定的标记,这使得与a无法区分。一个。但至少生成的XML格式正确,我可以读取数据。