【问题标题】:Character encoding while using DOMDocument for parsing a xml-file使用 DOMDocument 解析 xml 文件时的字符编码
【发布时间】:2014-12-29 00:40:05
【问题描述】:

我在读取 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;

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

【问题讨论】:

    标签: php xml character-encoding domdocument


    【解决方案1】:
    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比较。

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 2011-06-21
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      相关资源
      最近更新 更多