【发布时间】:2023-03-18 16:39:01
【问题描述】:
我正在使用我的 PHP 来搜索来自特定地址的图像,所以我想删除所有这些 img 标签。
我的 img 标签显示如下:
<img src="http://example.com/someimage1.jpeg">
<img src="http://example.com/someimage2.jpeg">
<img src="http://example.com/someimage3.jpeg">
<img src="http://example.com/someimage4.jpeg">
<img style="OVERFLOW: hidden; WIDTH: 0px; MAX-HEIGHT: 0px" alt="" src="http://test.mydomain.com/project433q325/track/Images/signature.gif?id=446&etc=1586624376">
当我尝试这个时:
foreach ($src as $image) {
$image = preg_replace("\<img src\=\"(.+)\"(.+)\/\>/i", '', $src);
}
它不会删除img标签,所以我也试过这个:
foreach ($src as $image) {
$image = preg_replace("/<img[^>]+\>/i", "", $src);
}
我仍然有同样的问题,因为它不会删除 img 标签。
这里是完整的代码:
if (strpos($inbox_message, 'http://test.mydomain.com/project433q325/track/Images/signature.gif?') !== false) {
$doc = new DOMDocument();
$doc->loadHTML($inbox_message);
$xpath = new DOMXpath($doc);
$src = $xpath->evaluate("string(//img/@src)");
if ($src) {
foreach ($src as $image) {
//image->nodeValue = preg_replace('<img.*?src='.$src.'.*?/>!i', '', $src);
//$src = preg_replace("/<img[^>]+\>/i", "", $src);
$image = preg_replace("\<img src\=\"(.+)\"(.+)\/\>/i", '', $src);
//}
}
$inbox_message = $doc->saveHTML();
}
我想要做的是我只想搜索具有显示“http://test.mydomain.com/project433q325/track/Images/signature.gif?”的 src 地址的 img 标签并删除它们。
你能告诉我一个例子,我如何搜索具有特定 src 地址的每个 img 标签,以便我可以使用 preg_replace 删除每个 img 标签?
谢谢。
编辑:这是 $inbox_message 变量:
$inbox_message = '<img src="http://example.com/someimage1.jpeg"><img src="http://example.com/someimage2.jpeg"><img src="http://example.com/someimage3.jpeg"><img src="http://example.com/someimage4.jpeg"><img style="OVERFLOW: hidden; WIDTH: 0px; MAX-HEIGHT: 0px" alt="" src="http://test.mydomain.com/project433q325/track/Images/signature.gif?id=446&etc=1586624376">';
【问题讨论】:
-
使用正则表达式来操作 HTML 会导致各种问题,我建议使用 DOM 解析器(DOMDocument 和 loadHTML)。
-
我试过了,它不会删除它。
-
@NigelRen 能否请您发布我应该使用 DOM 解析器删除每个 img 标签的来源?
标签: php regex preg-replace html-parsing