从字符串中删除特定图像

Remove specific image from a string

我想从字符串中删除特定图像。

我需要删除具有特定宽度和高度的图像。

我试过了,但这会删除第一张图片。

$description = preg_replace('/<img.*?>/', '123', $description, 1); 

我想删除 any/all 个具有特定宽度和高度的图像。
例如。删除此图片 <img width="1" height="1" ..../>

给大家做了个小例子

<?php

$string = 'something something <img src="test.jpg" width="10" height="10" /> and something .. and <img src="test.jpg" width="10" height="10" /> and more and more and more';
preg_match_all('~<img(.+?)width="10"(.+?)height="10"(.+?)/>~is', $string, $return);

foreach ($return[0] as $image) {
    $string = str_replace($image, '', $string);
}

echo $string;

我建议您不要使用正则表达式来解析(或操作)HTML,因为这不是一个好主意,and here's a great SO answer on why

例如,通过使用 Peter 的方法 (preg_match_all('~<img src="(.+?)" width="(.+?)">~is', $content, $return);),您假设所有图像都以 <img 开头,后跟 src,然后包含 width=,所有的输入都完全一样,并且使用那些精确的空格分隔,以及那些特定的引号。这意味着您将不会捕获任何您想要删除的这些完全有效的 HTML 图像:

<img src='asd' width="123"> <img src="asd" width="123"> <img src="asd" class='abc' width="123"> <img src="asd" width = "123">

虽然完全有可能捕捉到所有这些情况,但您真的想要经历所有这些努力吗?当您可以使用现有工具解析 HTML 时,为什么要重新发明轮子。看看this other question.

我得到了解决方案:

$description = preg_replace('!<img.*?width="1".*?/>!i', '', $description);