更新 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/ 在加载到 DOMDocument 之前净化 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

顺便说一句,它适用于来自另一个站点的数据,就像您说的那样为该域中的所有页面保留标题。

相关链接
  • HTMLPurifier dies when the following code is run through it(类似主题的未回答问题)
  • 最佳答案

    您不应该需要 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 强大得多。

    关于php - htmlpurifier,第三方源的过度净化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4221035/

    10-09 20:58