业务经理

微信扫描以上二维码

028-61286886

技术咨询

过滤掉内容中img标签里style所有元素

迅睿框架 更新 2020-08-27 09:03:57 繁星

用自定义函数过滤掉内容中img标签里style所有元素,在custop.php用了下面的代码,但是发现会把p标签里的style也都过滤了,有没有大神能帮忙看看

$content = preg_replace( '/(<img.*?)(style=.+?[\'|"])|((width)=[\'"]+[0-9]+[\'"]+)|((height)=[\'"]+[0-9]+[\'"]+)/i', '$1' , $content);


方案

  • 云畔设计 #1 · 2020-08-18 17:15:19
    首先要知道你用在什么地方,在custop.php只能定义函数不能写你这一句代码
  • 卧龙隐者 #2 · 2020-08-18 17:51:18
    (<img.*?)(style=.+?
    这一段表示查找img标签的下一个style
    如果你有一个img标签里面没有style,就会把下一个标签里的style删除我不是很懂正则,具体怎么弄您再研究研究
  • 繁星 #3 · 2020-08-25 17:15:51
    有大神能帮忙么
  • 繁星 #4 · 2020-08-25 17:16:36
    云畔设计 是custop.php里函数的一部分
  • 小黄人 18html.com #5 · 2020-08-26 10:56:44
    有个办法你先把 $content 里的 p替换一下$content = str_replace("<p style=","<p_s_t_y_l_e=",$content);$content = preg_replace( '/(<img.*?)(style=.+?[\'|"])|((width)=[\'"]+[0-9]+[\'"]+)|((height)=[\'"]+[0-9]+[\'"]+)/i', '$1' , $content);$content = str_replace("<p_s_t_y_l_e=","<p style=",$content);输出就保留了 p style不过这个有个漏洞,就是如果 p和style 不是连一起的话,可能无法判断到!
  • 卧龙隐者 #6 · 2020-08-26 11:58:13
    $content = preg_replace( '/(<img)(.*?)(src=".*?")(.*?)>/', '$1 $3/>' , $content);
    试试这个
    我这个是让你的img标签里面只剩下src="***"
  • 小黄人 18html.com #7 · 2020-08-26 15:46:45
    $preg = "/<img.*?src=[\"|\'](.*?)[\"|\'].*?>/";
    $img = '<img src="$1">';
    $content = preg_replace($preg,$img,$content);
    刚才在 CSDN 看到一段代码,可以实现
  • 小黄人 18html.com #8 · 2020-08-26 16:03:48
    上面会只剩下 src
    下面这段则会保留除了 style 之外的
    $content = preg_replace( '/(<img.*?)(style=.+?[\'|"])/i', '$1' , $content);

    image

    image
  • 卧龙隐者 #9 · 2020-08-26 16:44:21
    楼主原来的也类似您这种
    这种如果img里面没有style,就会把下一个其他标签的style删除,也就是楼主想解决的问题小黄人 18html.com
  • 小黄人 18html.com #10 · 2020-08-26 16:47:57
    卧龙隐者 不存在的,我这里只替换 <img> 内的,不会自动跳到下一个
    image

    image
  • 卧龙隐者 #11 · 2020-08-26 17:00:18
    这就奇怪了,我这边不行
    image

    image
    小黄人 18html.com
  • 小黄人 18html.com #12 · 2020-08-26 17:16:30
    卧龙隐者 那就不清楚了,会不会是PHP版本问题
    image

    image
  • 小黄人 18html.com #13 · 2020-08-26 17:28:30
    满意答案
    卧龙隐者 试试这个,测试可以通过,结尾加个结束就好了
    $content = preg_replace( '/(<img.*?)(style=.+?[\'|"])[^>]/i', '$1' , $content);
  • 卧龙隐者 #14 · 2020-08-26 17:30:22
    这样就行了,高手小黄人 18html.com
  • 小黄人 18html.com #15 · 2020-08-26 17:31:45
    卧龙隐者 测试了下,长文应该有问题!你那一句是通过了!长文复杂情况下,可能会出问题
  • 小黄人 18html.com #16 · 2020-08-26 17:43:04
    卧龙隐者 同一行会替换下一个><p如果换行,就不会替换><p
  • 卧龙隐者 #17 · 2020-08-26 17:53:06
    原来如此楼主的好像也是要换行小黄人 18html.com
  • 小黄人 18html.com #18 · 2020-08-26 17:54:21
    卧龙隐者 这样吧,在原内容上,先给 > 弄个换行,这样在替换的时候就不会延续了对于前端也不影响
    $content = str_replace(">", ">".PHP_EOL, $str);
    $content = preg_replace( '/(<img.*?)(style=.+?[\'|"])/i', '$1' , $content);
  • 繁星 #19 · 2020-08-27 09:03:57
    @小黄人 18html.com:感谢大神指点!!!!

迅睿系统漏洞

站群分站系统
站群分站系统(2026-10-15)
子站域名新增llms.txt访问
GEO系统
GEO系统(2026-10-14)
修复下载zip空白地址问题 修复流量复刻和任务队列错误
GeoSeo收录宝
GeoSeo收录宝(2026-10-14)
新增 站长工具箱 前端首页自动调用meta 数据
滑块验证码 Gocaptcha
滑块验证码 Gocaptcha(2026-10-13)
基于开源项目 go-captcha 的行为验证码插件,滑动拼图、区域...
GeoSeo工具箱
GeoSeo工具箱(2026-10-13)
优化巡检任务
GeoSeo排名助手
GeoSeo排名助手(2026-10-11)
加入大模型自定义
SEO聚合关键字
SEO聚合关键字(2026-10-11)
优化关键字列表页最多支持1万篇文章,过多会导致服务器扛不住;
CMS内容同步复制
CMS内容同步复制(2026-10-10)
增加时间是否更新的开关