联系官方销售客服

1835022288

028-61286886

求助 版主:官方研发技术组
过滤掉内容中img标签里style所有元素
类型:迅睿CMS 更新时间: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
    Chrome 0
    首先要知道你用在什么地方,在custop.php只能定义函数不能写你这一句代码
  • 卧龙隐者
    #2楼    卧龙隐者
    2020-08-18 17:51:18
    Chrome 0
    (<img.*?)(style=.+?
    这一段表示查找img标签的下一个style
    如果你有一个img标签里面没有style,就会把下一个标签里的style删除我不是很懂正则,具体怎么弄您再研究研究
  • 繁星
    #3楼    繁星
    2020-08-25 17:15:51
    Chrome 0
    有大神能帮忙么
  • 繁星
    #4楼    繁星
    2020-08-25 17:16:36
    Chrome 0
    云畔设计 是custop.php里函数的一部分
  • 小黄人 18html.com
    #5楼    小黄人 18html.com
    2020-08-26 10:56:44
    Chrome 0
    有个办法你先把 $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
    Chrome 0
    $content = preg_replace( '/(<img)(.*?)(src=".*?")(.*?)>/', '$1 $3/>' , $content);
    试试这个
    我这个是让你的img标签里面只剩下src="***"
  • 小黄人 18html.com
    #7楼    小黄人 18html.com
    2020-08-26 15:46:45
    Chrome 0
    $preg = "/<img.*?src=[\"|\'](.*?)[\"|\'].*?>/";
    $img = '<img src="$1">';
    $content = preg_replace($preg,$img,$content);
    刚才在 CSDN 看到一段代码,可以实现
  • 小黄人 18html.com
    #8楼    小黄人 18html.com
    2020-08-26 16:03:48
    Chrome 0
    上面会只剩下 src
    下面这段则会保留除了 style 之外的
    $content = preg_replace( '/(<img.*?)(style=.+?[\'|"])/i', '$1' , $content);

    image

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

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

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

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