我有这个XML文件:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Identifikation xmlns="http://www.ofd-hannover.la/Identifikation">
<Version>2006-10</Version>
...
它包含德国特殊字符,如'ÄÖß'。目前我使用这段代码:
$strXml = file_get_contents('assets/file.xml');
$strXml = iconv("ISO-8859-1","UTF-8",$strXml);
$objXml = simplexml_load_string($strXml);
但结果是:
Ahornstraße而不是Ahornstraße
无论我是否插入UTF-8 MySql数据库,或只是在带有字符集UTF-8的HTML模板中回显。
答案 0 :(得分:1)
看起来您的文本正在进行双重解码:您使用UTF-8,将其解释为ISO 8859-1,然后将其转换为UTF-8,导致混乱,有时称为“mojibake”。
在ISO 8859-1中,字符ß将是单字节DF
;在Unicode中,它是代码点U+00DF
,在UTF-8中需要两个字节C3 9F
。将这些字节作为单独的ISO 8859-1字符处理并编码它们,我认为可以提供您所拥有的字符。
因此,似乎XML文件的标头中的编码是谎言,并且它实际上不是ISO 8859-1编码。整个文件都是UTF-8,或者包含来自其他来源的unvetted输入,其中一些实际上是UTF-8。
答案 1 :(得分:-1)
现在它以某种方式工作(Laravel Code代码段):
$strXml = file_get_contents(Input::file('xmlfile'));
$objXml = simplexml_load_string($strXml);
输出正确的结果。我不知道出了什么问题......