在PHP中将ISO-8859-1编码的XMl-File转换为UTF-8

时间:2014-01-06 21:14:46

标签: php xml encoding simplexml

我有这个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模板中回显。

2 个答案:

答案 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);

输出正确的结果。我不知道出了什么问题......