htmlpurifier, чрезмерная очистка стороннего источника - PullRequest
4 голосов
/ 19 ноября 2010

ОБНОВЛЕНИЕ 2: http://htmlpurifier.org/phorum/read.php?3,5088,5113 Автор уже выявил проблему.

ОБНОВЛЕНИЕ: проблема, кажется, является исключительной до версии 4.2.0. Я понизил до 4.1.0, и это работает. Спасибо за твою помощь. Автор пакета уведомлен.

Я очищаю некоторые страницы, такие как:

http://form.horseracing.betfair.com/horse-racing/010108/Catterick_Bridge-GB-Cat/1215

Согласно валидации W3C это действительно XHTML Strict.

Затем я использую http://htmlpurifier.org/ для очистки HTML перед загрузкой в ​​DOMDocument. Однако он возвращает только одну строку содержимого.

Выход:

12:15 Catterick Bridge - Tuesday 1st January 2008 - Timeform | Betfair

Код:

echo $content; # all good
$purifier = new \HTMLPurifier();
$content = $purifier->purify($content);
echo $content; # all bad

Кстати, он работает с данными, полученными с другого сайта, так же, как вы говорите, оставляет заголовок для всех страниц этого домена.

Ссылки по теме

1 Ответ

0 голосов
/ 20 ноября 2010

Вам не нужен очиститель HTML.Класс DOMDocument позаботится обо всем за вас.Однако это вызовет предупреждение о недействительном html, поэтому просто сделайте следующее:

$doc = new DOMDocument();
@$doc->loadHTML($content);

Тогда ошибка не будет вызвана, и вы можете делать то, что вы хотите с HTML.Если вы очищаете ссылки, я бы порекомендовал вам использовать SimpleXMLElement :: xpath ();Это намного проще, чем работать с DOMDocument.Другой пример:

$xml = new SimpleXMLElement($content);
$result = $xml->xpath('a/@href');

print_r($result);

Вы можете получить гораздо более сложные xpath, которые позволяют вам указывать имена классов, идентификаторы и другие атрибуты.Это намного мощнее, чем DOMDocument.

...