4

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

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

相关链接

4

1 回答 1

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 强大得多。

于 2010-11-20T17:02:56.943 回答