Удалить изображение из строки на основе URL src - PullRequest
0 голосов
/ 20 мая 2018

Я ищу простой и эффективный способ удалить конкретное изображение из статьи.Все, что я знаю, это URL-адрес изображения, которое мне нужно удалить.

  • Изображение может использовать или не использовать другие атрибуты.
  • Изображение может или не может вообще существовать в статье.
  • Возможно, в этой статье могут быть другие изображения (кроме URL).

Мой выбор: регулярное выражение или DOMDocument, возможно, с использованием HTML5синтаксический анализатор, такой как https://github.com/Masterminds/html5-php.

Мои навыки регулярных выражений не так хороши, и я не уверен, является ли хорошей идеей использовать регулярные выражения для достижения этой цели, потому что я читал, что следует избегать регулярных выражений для анализа HTML.Что я имею до сих пор с regex, так это удаление полного изображения, но не знаю, как удалить его на основе определенного URL-адреса src.

$img_src = 'http://www.example.org/image_to_be_removed.jpg';

$article = '<h1>Test article with HTML5 tags</h1>
<nav><a href="/link1/">Link 1</a></nav>
<p>This is an example article. The article may or may not include html5 tags, images and other things.</p>
<img src="http://www.example.org/image_to_be_removed.jpg">
<p>More example text.</p>';

$article = preg_replace("/<img[^>]+\>/i", "", $article);
echo $article;

Я еще не копался в решении DOMDocument,потому что я не уверен, возможно ли это вообще или регулярное выражение может считаться лучшей практикой?

Ответы [ 4 ]

0 голосов
/ 20 мая 2018

не рекомендуется для анализа html с регулярным выражением.

Как вы предложили, вы можете, например, использовать DOMDocument или, например, PHP Simple HTMLDOM Parser .

Поскольку вы заявляете, что «все, что я знаю, это URL-адрес изображения, которое мне нужно удалить», вы можете найти атрибут src тега img, используя xpath или ищаимя тега и проверьте это.

Пример DOMDocument:

$img_src = 'http://www.example.org/image_to_be_removed.jpg';
$article = '<h1>Test article with HTML5 tags</h1>
<nav><a href="/link1/">Link 1</a></nav>
<p>This is an example article. The article may or may not include html5 tags, images and other things.</p><img src="http://www.example.org/image_to_be_removed.jpg"><img src="http://www.example.org/image_not_to_be_removed.jpg"><p>More example text.</p>\';
<p>More example text.</p>';
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($article);
$xpath = new DOMXPath($dom);
$elements = $xpath->query("//img");
foreach ($elements as $elememnt) {
    if ($elememnt->getAttribute("src") === $img_src) {
        $elememnt->parentNode->removeChild($elememnt);
    }
}
echo $dom->saveHTML();

Пример PHP Simple HTML DOM Parser с использованием simple_html_dom.php:

$htmlDom = str_get_html($article);
foreach($htmlDom ->find('img[src=http://www.example.org/image_to_be_removed.jpg]') as $item) {
    $item->outertext = '';
}
$htmlDom->save();
echo $htmlDom;
0 голосов
/ 20 мая 2018

использование preg_quote:

$article = preg_replace("/<img[^>]+src=\"" . preg_quote($img_src, '/') . "\"[^>]*\>/i", "", $article);

Regex Demo

php Demo

0 голосов
/ 20 мая 2018

Вы можете попробовать ниже с str_replace

<?php
$img_src = 'http://www.example.org/image_to_be_removed.jpg';

$article = '<h1>Test article with HTML5 tags</h1>
<nav><a href="/link1/">Link 1</a></nav>
<p>This is an example article. The article may or may not include html5 tags, images and other things.</p>
<img src="http://www.example.org/image_to_be_removed.jpg">
<p>More example text.</p>';
$new = str_replace('src="http://www.example.org/image_to_be_removed.jpg"','',$article);
echo $article;
echo '<br/>';
echo $new;
?>

есть и preg_replace из вашего кода и str_replace, чтобы заметить почтение.Есть и другие функции, которые делают то же самое, например sprintf, strtr, str_replace и preg_replace, которые вы можете использовать в зависимости от того, какие наборы

0 голосов
/ 20 мая 2018

Вы можете попробовать это.Кажется, чтобы проверить хорошо.В любом случае, это должно дать вам представление о том, как действовать.

$img_src = 'http://www.example.org/image_to_be_removed.jpg';

$article = '<h1>Test article with HTML5 tags</h1>
<nav><a href="/link1/">Link 1</a></nav>
<p>This is an example article. The article may or may not include html5 tags, images and other things.</p>
<img style="width:100px;" src="http://www.example.org/image_to_be_removed.jpg" class="myClass">
<p>More example text.</p>';

$article = preg_replace('/\s{1,}/', ' ', $article);  //Very important step to make sure only 1 space exist between any character.
$img_src = preg_replace('/\//', '\\/', $img_src); //Adds slashes to the url.
$regex = '/<img[\W\D\w]{0,}src=\"' . $img_src . '\"[\W\D\w]{0,}>\s/'; //Define the regex.
$article = preg_replace($regex, '', $article);
echo $article;
...