htmlpurifier,第三方来源的过度净化

时间:2010-11-19 00:21:05

标签: php htmlpurifier

更新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。

然后我在加载到DOMDocument之前使用http://htmlpurifier.org/来纯化HTML。但是它只返回一行内容。

输出:

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 :(得分:0)

您不应该需要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,允许您指定类名,ID和其他属性。这比DOMDocument强大得多。