nodeValue из DomDocument, возвращающий странные символы в PHP - PullRequest
2 голосов
/ 08 января 2010

Поэтому я пытаюсь разобрать HTML-страницы и ищу абзацы (<p>), используя get_elements_by_tag_name('p');

Проблема в том, что когда я использую $element->nodeValue, он возвращает странные символы. Документ сначала загружается в $ html с помощью curl, а затем загружается в DomDocument.

Я уверен, что это связано с кодировками.

Вот пример ответа: "aujourdà € € ™ hui".

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 14 ноября 2012

У меня были те же проблемы, и теперь я заметил, что loadHTML () больше не принимает 2 параметра, поэтому мне пришлось искать другое решение. Используя следующую функцию в моей библиотеке DOM, я смог удалить забавные символы из моего HTML-контента.

private static function load_html($html)
{
    $doc = new DOMDocument;
    $doc->loadHTML('<?xml encoding="UTF-8">' . $html);

    foreach ($doc->childNodes as $node)
        if ($node->nodeType == XML_PI_NODE)
            $doc->removeChild($node);

    $doc->encoding = 'UTF-8';

    return $doc;
}
3 голосов
/ 10 мая 2011

Я исправил это путем принудительного преобразования в UTF-8, хотя исходный текст был UTF-8:

$text = iconv("UTF-8", "UTF-8", $text);
$dom = new SmartDOMDocument();
$dom->loadHTML($webpage, 'UTF-8');
.
.
echo $node->nodeValue;

PHP странен:)

1 голос
/ 08 января 2010

Это проблема с кодировкой.попробуйте явно установить кодировку в UTF-8.

это должно помочь: http://devzone.zend.com/article/8855

0 голосов
/ 13 июля 2018

Видимо для меня ничего из вышеперечисленного не сработало, наконец я нашел следующее:

// Create a DOMDocument instance 
$doc = new DOMDocument();

// The fix: mb_convert_encoding conversion
$doc->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));

Источник и дополнительная информация

...