PHP - 从字符串中删除 <img> 标签

66

嘿,我需要从一个字符串中删除所有的图片,但是我找不到正确的方法来实现它。

这是我尝试过的方法,但它并没有起作用:

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

有什么想法吗?


3
$content = preg_replace(...,$ content); $content = preg_replace(...,$ content); - Daniel Sloof
通常,我使用https://txt2re.com/来制定正则表达式。之后,根据我的需要修改代码。 - FerdousTheWebCoder
7个回答

172
尝试去掉在 > 前面的 \
编辑:我刚刚测试了你的正则表达式,它可以正常工作。这是我使用的:
<?
    $content = "this is something with an <img src=\"test.png\"/> in it.";
    $content = preg_replace("/<img[^>]+\>/i", "(image) ", $content); 
    echo $content;
?>

结果为:

这是一个包含(图片)的东西。

3
你能把这个替换成图片的alt吗? - MysteryDev
尝试在>的前面删除\。preg_replace("/<img[^>]+\>/i", "(image) ", $content); 这与实际问题有何不同? - fat_mike

23
你需要将结果赋值回 $content,因为 preg_replace 不会修改原始字符串。
$content = preg_replace("/<img[^>]+\>/i", "(image) ", $content);

11

6
这会删除所有标签,不仅仅是img标签。 - Henrik Petterson

8

Sean,它可以正常工作,我刚刚使用了这段代码。

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

//结果只有纯文本。它有效!!!


1
我想显示新闻故事的前300个单词作为预览,但不幸的是,如果故事在前300个单词中有一张图片,那么它会在预览列表中显示,这真的破坏了我的布局。我使用上面的代码隐藏了从数据库中获取的字符串中的所有图像,它的效果非常好!
$news = $row_latest_news ['content'];
$news = preg_replace("/<img[^>]+\>/i", "", $news); 
if (strlen($news) > 300){
echo substr($news, 0, strpos($news,' ',300)).'...';
} 
else { 
echo $news; 
}

评论使用迷你Markdown格式:链接 斜体 粗体 代码。帖子作者将始终收到您的评论通知。如果还要通知先前的评论者,请提及他们的用户名: - xavip

-2
$this->load->helper('security');
$h=mysql_real_escape_string(strip_image_tags($comment));

如果用户输入
<img src="#">
在数据库表中只需插入此 # 字符。
对我来说很有效。

-4

只需使用CodeIgniter的form_validation类:

strip_image_tags($str).

$this->load->library('form_validation');
$this->form_validation->set_rules('nombre_campo', 'label', 'strip_image_tags');

4
他说他在使用CodeIgniter吗? - galdikas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接