Ошибки при попытке очистить HTML с помощью DOMDocument - PullRequest
1 голос
/ 05 января 2012

Я пытаюсь получить HTML-код веб-страницы и удалить из него теги <script>.Я могу получить HTML (используя cURL), но я не могу удалить теги <script>, используя PHP DOMDocument.Удаление тегов - это всего лишь одна вещь, которую я хочу сделать с DOMDocument, поэтому я не могу использовать другое решение (я думаю, я мог бы использовать другой анализатор DOM, но я просто хочу знать, как это исправить).

Мойкод:

function clean_html(&$html, $targets = array('script'))
{
    $doc = new DOMDocument();
    $doc->loadHTML($html); // here I get the error

    foreach($targets as $target) {
        $tags = $doc->getElementsByTagName($target);
        $length = $tags->length;

        for ($i = 0; $i < $length; $i++) {
          $tags->item(0)->parentNode->removeChild($tags->item(0));
        }
    }

    return $doc->saveHTML();
}

$html = get_html('http://www.google.nl'); // this gets the HTML using cURL.
clean_html($html);

Ошибки (их много +/- 20):

Предупреждение: DOMDocument :: loadHTML () [domdocument.loadhtml]: htmlParseEntityRef: нет именив Entity, строка: 24 в C: ... \ code \ views \ index.phtml в строке 22 * ​​1013 *

HTML-код, полученный из вызова cURL:

http://pastebin.com/TrV99wAr

Есть ли способ, позволяющий DOMDocument исправлять ошибки или, по крайней мере, он может анализировать остальную часть HTML?

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Безопасность прежде всего

Для очистки ввода HTML существует только один инструмент, который может защитить вас.Вы всегда должны использовать этот инструмент, если вы сами не управляете данными.(и даже чем, в случае, если кто-то получает ваши данные для входа, может быть лучше использовать их).

Всегда используйте HTMLPurifier:

Это может быть ресурс-Хенгри, но все остальное похоже на наведение пистолета на вашу инфраструктуру.http://htmlpurifier.org/

Я не смог воспроизвести вашу ошибку.

Поэтому я думаю это может быть ошибка, которая зависит от версии / платформы.я тестировал на WinXP, Pro, x86, SP3 / PHP5.3.3

0 голосов
/ 05 января 2012

Эта ошибка означает, что у вас есть & в вашем HTML, который не является сущностью HTML. Они всегда должны быть закодированы как &amp;.

...