Php 使用DOMDocument解析xml文件时的字符编码

Php 使用DOMDocument解析xml文件时的字符编码,php,xml,character-encoding,domdocument,Php,Xml,Character Encoding,Domdocument,我在读取xml文件时遇到错误的字符编码问题 虽然这个文件正确地显示了文件的完整内容 $reader = new DOMDocument(); $reader->preserveWhiteSpace = false; $reader->load('zip://content.odt#content.xml'); echo $reader->saveXML(); …这一个给了我一个奇怪的输出(德语umlauts、em破折号、µ或类似字符未正确显示): 我不知道为什么会这样。希望

我在读取xml文件时遇到错误的字符编码问题

虽然这个文件正确地显示了文件的完整内容

$reader = new DOMDocument();
$reader->preserveWhiteSpace  = false;
$reader->load('zip://content.odt#content.xml');
echo $reader->saveXML();
…这一个给了我一个奇怪的输出(德语umlauts、em破折号、µ或类似字符未正确显示):

我不知道为什么会这样。希望有人能给我解释一下

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

DOMNode::$nodeValue
包含节点的值,通常为文本。DOMDocument库返回的所有文本字符串(其中DOMNode是其中的一部分)都采用UTF-8编码,而与XML文档的编码无关

正如您所写,如果您显示第一个:

echo $reader->saveXML();
所有UMLAUT都被保留下来,很可能XML本身带有不同的UTF-8编码,因为后者

$content .= $child->nodeValue;
...
echo $content;
但我做不到

由于您没有分享显示和读取输出的方式以及与哪个应用程序的共享,因此不能说更多

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

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

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