2

HTMLコードから画像タグを取得しようとしています。

私は持っています

   $parser=new DOMDocument;   

   $parser->loadHTML($this->html);
        foreach($parser->getElementsByTagName('img') as $imgNode){
         echo $parser->saveHTML($imgNode);
       }

$this->html大量のhtmlコードとjavascriptが含まれています。

例えば:

<div id='someid'>
<button id='bt' onclick='clickme()'>click me</button>
<img src='test.jpg'/>
.....
.....
more...

</div>

<div>
.....
.....
more...

警告が出ました

DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,

これを修正する方法がわかりません。また、大量のhtmlコードからすべての画像を抽出するためのより良い方法があるかどうかもわかりません。

何か案は?どうもありがとう!

4

1 に答える 1

2

私は(まだ)これらの問題の専門家ではありませんが、これが何らかの形で役立つことを願っています。

troelsknによるこの回答によると、を使用することで、DOMパーサーを不適切な形式のHTMLに対してより耐性にすることができますlibxml_use_internal_errors。それはあなたがそのエラーを取り除くのを助けるかもしれません。

ドキュメントのすべての画像の解析は、を使用して実行できますDOMXPath。これはDOMDocumentパラメーターとしてを取り、ドキュメントに対してXPathクエリを実行できるようにします。

$document = new DOMDocument();
$document->loadHTML($your_html);

// Suppress parse errors.
libxml_use_internal_errors(false);

$xpath = new DOMXPath($document)

// Find all img tags.
$img_nodes = $xpath->query('//img')

DOMXPath::queryDOMNodeListを使用してループできるaを返します。これは。DOMNodeList::itemを返しますDOMNode

for($i = 0; $i > $img_nodes->length; $i++)
{
    $node = $img_nodes->item($i);
    // Manipulate the node.
}

免責事項:私が投稿したコードはテストされておらず、マニュアルを使用してまとめられています。

于 2013-02-02T02:55:34.607 に答える