0

画像パスが特定のディレクトリ内にある場合、コンテンツから画像の HTML コードを取り除こうとしています。

たとえば、次のコンテンツ ブロックを見てみましょう。

Donec iaculis <img src="http://www.domain.tld/smilies/butterfly.gif" alt="butterfly.gif" /> arcu pretium elementum et posuere felis. <img alt="mrgreen.gif" src="http://www.domain.tld/smilies/mrgreen.gif" /> Duis sit amet erat vitae tellus eleifend varius. <img src="http://www.domain.tld/avatars/somedude.jpg" /> Pellentesque ac ligula

私が求めているのは:

Donec iaculis arcu pretium elementum et posuere felis. Duis sit amet erat vitae tellus eleifend varius. <img src="http://www.domain.tld/avatars/somedude.jpg" /> Pellentesque ac ligula

この例では、2 つのイメージを削除して、パス/smilies/内に存在する 1 つのイメージを残す必要があります。/avatars/

alt="" は、一致する 2 つの画像の 2 つの異なる場所にあることに注意してください。

4

2 に答える 2

0

DOM を使用した例:

$doc = new DOMDocument();
@$doc->loadHTML($yourHTML);
foreach($doc->getElementsByTagName('img') as $imgNode) {
    if (strpos('/smilies/', $imgNode->getAttribute('src')))
        $imgNode->parentNode->removeChild($imgNode);
}
$yourHTML = $doc->saveHTML();
于 2013-08-10T01:57:45.853 に答える
0
<?php
$html = 'Donec iaculis magna eget <img src="http://www.domain.tld/smilies/butterfly.gif" alt="butterfly.gif" /> arcu pretium elementum et posuere felis. Vivamus eget sodales lorem, id dictum lorem. Nunc vitae facilisis nibh. Integer dignissim, diam non molestie luctus, libero lacus auctor eros, vel hendrerit lorem risus vel elit. Pellentesque ac magna nec lectus tristique blandit. <img src="http://www.domain.tld/smilies/mrgreen.gif" /> Duis sit amet erat vitae tellus eleifend varius. <img src="http://www.domain.tld/avatars/somedude.jpg" /> Pellentesque ac ligula eget lacus dapibus fermentum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi gravida tempor leo eget lacinia. Curabitur interdum diam in congue consequat.';

$baseurl = 'http://www.domain.tld';
$folder = '/smilies/';

$dom = new domDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagname('img');
$removeList = array();
foreach ($images as $domElement) {
    $src = $domElement->getAttribute('src');
    if (strpos($src, $baseurl . $folder) !== false) {
        $removeList[] = $domElement;
    }
}

foreach ($removeList as $toRemove) {
    $toRemove->parentNode->removeChild($toRemove);
}

$html = $dom->saveHTML();

echo $html;

反復している DOMNodeList から DOMNode を削除できないため、2 つの個別の foreach ループを実行する必要があることに注意してください。これは、カシミールの答えの問題でもあると思います。

于 2013-08-10T02:00:16.407 に答える