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/を使用して HTML を浄化してから DOMDocument に読み込みます。ただし、1 行のコンテンツしか返していません。

出力:

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 purifier は必要ありません。DOMDocument クラスがすべてを処理します。ただし、無効な html で警告がトリガーされるため、次のようにします。

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

その後、エラーは発生せず、HTML で必要な操作を行うことができます。

リンクをスクレイピングする場合は、SimpleXMLElement::xpath(); を使用することをお勧めします。これは、DOMDocument を操作するよりもはるかに簡単です。その別の例:

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

print_r($result);

クラス名、ID、およびその他の属性を指定できる、より複雑な xpath を取得できます。これは DOMDocument よりもはるかに強力です。

于 2010-11-20T17:02:56.943 に答える