0
$string = 'text <span style="color:#f09;">text</span>
<span class="data" data-url="http://www.google.com">google.com</span>
text <span class="data" data-url="http://www.yahoo.com">yahoo.com</span> text.';

私がやりたいことは、クラスdataを持つすべてのスパンからdata-urlを取得することです。したがって、次のように出力されます。

$string = 'text <span style="color:#f09;">text</span>
http://www.google.com text http://www.yahoo.com text.';

そして、残りのhtml タグをすべて削除したいと思います。

$string = strip_tags($string);

出力:

$string = 'text text http://www.google.com text http://www.yahoo.com text.';

誰かがこれを行う方法を教えてもらえますか?

4

4 に答える 4

4

文字列に表示する HTML スニペット以外のものが含まれている場合は、このXPathでDOMを使用する必要があります

//span/@data-url

例:

$dom = new DOMDocument;
$dom->loadHTML($string);
$xp = new DOMXPath($dom);
foreach( $xp->query('//span/@data-url') as $node ) {
    echo $node->nodeValue, PHP_EOL;
}

上記は出力されます

http://www.google.com
http://www.yahoo.com

すでに HTML が読み込まれている場合は、次のこともできます。

echo $dom->documentElement->textContent;

strip_tags($string)この場合と同じ結果を返します。

text text
google.com
text yahoo.com text.
于 2010-09-01T13:53:11.940 に答える
1

SimpleXML要素ごとに and foreachを使用してみてください- 次に、class属性が有効かどうかを確認し、のを取得しdata-urlます

于 2010-09-01T13:36:36.413 に答える
0
preg_match_all("/data/" data-url=/"([^']*)/i", $string , $urls);

この方法で、すべてのURla=をフェッチできます。

また、 hszが述べたようにsimplexmlを使用することもできます

于 2010-09-01T13:41:09.050 に答える
0

簡単に言えば、しないでください。SO のどこかに、html を正規表現で解析することが悪い考えである理由を説明する素敵な暴言があります。要するに、「html は正規言語ではないため、正規表現では解析できない」ということになります。必要なのは、DOM に対応したものです。

@hsz が言ったように、HTML が XML として検証されることがわかっている場合、SimpleXML は適切なオプションです。整形式の html を必要としないDOMDocument::loadHTMLの方が良いかもしれません。HTML が DOMDocument オブジェクトに入ると、必要なものを簡単に抽出できます。こちらのドキュメントをご覧ください。

于 2010-09-01T14:01:20.907 に答える