2017-11-20 10 views
1

私はDOMDocumentを使ってhtmlとphpを操作します。問題は、テキストがページ(キリル文字)によく表示されます。ですが、「HTMLページソースを見る」に行くと、。それは次のようになります: Здесь оснPHP DOMDocument saveHTML正しくキリル文字をエンコードしない

何が問題なのですか? <meta> charsetはutf-8です。私のコード:

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

    // https://stackoverflow.com/questions/29493678/loadhtml-libxml-html-noimplied-on-an-html-fragment-generates-incorrect-tags 

    $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(); 
} 
+0

エンコードのドキュメントページを確認してください:https://stackoverflow.com/questions/14927122/how-to-save-russian-characters-in-a-utf-8-encoded-file –

答えて

0

問題が$dom->saveHTML();である、あなたはこのように、パラメータとしてルートノードを追加する必要があります。

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

突然それが置換して、異なったページをレンダリングします。一致しない場合は、$dom->encoding$dom->substituteEntitiesの値を再確認してください。UTF-8TRUEとなるはずです。

+0

あなたは、私の友人?私は多くの情報源を読んでおり、誰もこの解決策について書いていませんでした – sirjay

+0

メモリから、私は数年前に自分のフレームワークで同じ問題を抱えていました。より短い構文は、 '$ dom-> saveHTML($ dom-> documentElement);' – Code4R7

+0

@ sirjay [解決策を見つけた他](https://stackoverflow.com/questions/8218230/php-domdocument-loadhtml-not- encoding-utf-8-exactly)も同様です。この動作は[php.netのドキュメントではない](http://php.net/manual/en/domdocument.savehtml.php)です。また、Googleにはこれに関する[結果がありません](https://www.google.nl/search?q=%2Blibxml+%2Bsavehtml+-php)なので、SaveHTML関数内でlibxmlにパラメータを渡す必要があります。私はPHPを疑いますチームはこれを知っていますが、[バグ報告はありません](https://bugs.php.net/search.php?search_for=savehtml)です。これはユーザーが自分自身で見つけたものです。 – Code4R7

関連する問題