2017-11-20 21 views
1

DOMDocument을 사용하여 HTML 및 PHP 7을 조작합니다. 문제는 텍스트가 페이지 (키릴 문자)에 좋음을 나타내고, 이지만 "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