我正在寻找一种简单有效的方法来从文章中删除特定图像。我所知道的只是我需要删除的图片的图片网址。
我的选择可能是正则表达式或DOMDocument
,可能使用像https://github.com/Masterminds/html5-php这样的HTML5解析器。
我的正则表达式技巧不是那么好,我不确定使用正则表达式来实现这一点是个好主意,因为我读到应该避免使用正则表达式来解析HTML。 到目前为止,我使用正则表达式,是删除完整的图像,但不知道如何根据特定的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解决方案,因为我不确定它是否可行,或者正则表达式可能被视为最佳实践?
答案 0 :(得分:1)
使用preg_quote
:
$article = preg_replace("/<img[^>]+src=\"" . preg_quote($img_src, '/') . "\"[^>]*\>/i", "", $article);
答案 1 :(得分:0)
你可以试试这个。好像测试好了。无论如何,它应该让你知道如何继续。
$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;
答案 2 :(得分:0)
您可以在下面尝试使用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;
?>
你的代码和str_replace都有preg_replace来注意deference。 还有其他功能可以像sprintf,strtr,str_replace和preg_replace那样使用任何套件
答案 3 :(得分:0)
使用正则表达式解析html是not recommended。
根据您的建议,您可以使用DOMDocument或例如PHP Simple HTML DOM Parser。
因为您声明“我所知道的是我需要删除的图像的图像URL”,您可以使用xpath找到img标记的src属性,或者查找标记名称并检查它。
示例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.php
的简单HTML DOM解析器:
$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;