PHP DOMDocument saveHTML 未正确编码西里尔字母

PHP DOMDocument saveHTML not encoding cyrillic correctly

我使用 DOMDocument 来操纵 html 和 php 7. 问题是文本在页面上显示良好(西里尔文),但是当我去"See HTML page source",不好。它显示如下: Здесь осн

可能出了什么问题? <meta> 字符集是 utf-8。我的代码:

$dom = new DOMDocument();
if (@$dom->loadHTML(mb_convert_encoding("<div>$body</div>", 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD)) {

    // 

    $container = $dom->getElementsByTagName('div')->item(0);
    $container = $container->parentNode->removeChild($container);

    while ($dom->firstChild)
        $dom->removeChild($doc->firstChild);

    while ($container->firstChild )
        $dom->appendChild($container->firstChild);

    $xpath = new DOMXPath($dom); 
    $headlines = $xpath->query("//h2");
    // some code..

    return $dom->saveHTML();
}

问题出在$dom->saveHTML();,你需要添加根节点作为参数,像这样:

return $dom->saveHTML((new \DOMXPath($dom))->query('/')->item(0));

它突然以不同的方式呈现页面,并进行了替换。如果没有,请仔细检查 $dom->encoding$dom->substituteEntities 的值,它们应该显示为 UTF-8TRUE