2014-11-02 49 views
0

我在读取xml文件时遇到错误的字符编码问题。使用DOMDocument解析xml文件时的字符编码

虽然这一个正确显示该文件的全部内容......

$reader = new DOMDocument(); 
$reader->preserveWhiteSpace = false; 
$reader->load('zip://content.odt#content.xml'); 
echo $reader->saveXML(); 

...这一个给了我一个奇怪的输出(德语变音,长破折号,μ或类似的字符不显示正确):

$reader = new DOMDocument(); 
$reader->preserveWhiteSpace = false; 
$reader->load('zip://content.odt#content.xml'); 
$elements = $reader->getElementsByTagName('text'); 
foreach($elements as $node){ 
    foreach($node->childNodes as $child) { 
     $content .= $child->nodeValue; 
    } 
} 
echo $content; 

我不知道这是为什么。希望有人能向我解释。

回答

0
DOMDocument::saveXML() 

此方法以字符串形式返回整个XML文档。与任何XML文档一样,编码在XML declaration中给出,或者它具有UTF-8的默认编码。

DOMNode::$nodeValue 

包含节点的值,通常是文本。所有文本字符串DOMDocument库返回 - 其中DOMNode是 - 的一部分 - 使用UTF-8编码,而不考虑XML文档的编码。

当你写,如果你显示第一:用不同的编码方式,

echo $reader->saveXML(); 

所有的变音符号被保留下来,这是最有可能的XML本身船舶UTF-8,因为后来

$content .= $child->nodeValue; 
... 
echo $content; 

不这样做。

由于您不分享如何以及在哪个应用程序中显示并阅读输出,所以不能多说。

您很可能需要在后面的情况下将字符编码提示给显示应用程序。例如,如果你在浏览器中显示的文字,你应该在一开始添加适当的内容类型标题:

header("Content-Type: text/plain; charset=utf-8"); 

How to set UTF-8 encoding for a PHP file进行比较。