如何用php正则去掉得到img标签中的 border属性

作者:enenba | 发表于:2012-05-13 00:07 | 分类:php采集

    请问php正则如何去掉得到img标签中的 border属性,例如:<img src="test.gif" border="0" alt="test1" />   替换后的  <img src="test.gif" alt="test1" />

 

一开始我就想到要 只去掉border="" 很简单的写出

$search = '/(<img.*?)(border=".*?")([^>]+\/?>)/is';

它只能去掉形如<img src="囧1" border="囧2" />这样的border,一般的 <img>标签会有这样几种含有boder的情况

  1.     <img src="囧1" border="囧2" />
  2.     <img src='囧1' border='囧2' />
  3.     <img src=囧1 border=囧2 />

也就是有符合w3c标准的双引号,还有不符合w3c标准单引号,无引号的情况。想要把他们的border也去掉

于是改成以下的正则:

$search = '/(<img.*?)border=(["\']).*?\2([^>]+>)/is';

此正则只能解决有单、双引号的border,暂时没有解决无引号的

 

回去翻了以前的文章《获取<a>链接标签。从Snoopy类中提取函数》 

看了正则还支持三目运算: (xxx)? (?(分组号) yyy|zzz) 如果xxx不为空 执行yyy,否则执行zzzz

于是改成了此完美最终版本:

$search = '/(<img.*?)border=(["\'])?.*?(?(2)\2|\s)([^>]+>)/is';

终于解决问题了,上一个php例子

 

<?php
//php过滤img标签中的 border属性
$str = '
1、<img src="test1.jpg" border="1" />
2、<img src=\'test2.jpg\' border=\'2\' />
3、<img src=test3.jpg border=3 />
';
$search = '/(<img.*?)border=(["\'])?.*?(?(2)\2|\s)([^>]+>)/is';
$r = preg_replace($search,'$1$3',$str);
highlight_string($r);

//输出:
/*
1、<img src="test1.jpg"  /> 
2、<img src='test2.jpg'  /> 
3、<img src=test3.jpg /> 
*/
?>

过滤后只是多了一个空格,也不要紧了,已经解决问题了。

 

enenba原创,转载请保留出处:http://enenba.com/?post=164

end..

附件下载/演示源码:
remove-border.htm9.81KB

上一篇: 如何去掉jiathis分享条中的“这是什么工具 jiathis”   |   下一篇:php使用strip_tags的完整去除所有html标签» 标签: 正则 php采集 php过滤 数据采集

评论:

2012-08-14 11:58

正则
没有用心去学……
所以不会用

2012-08-14 12:13

不一定要会正则。你用别人写好的就行了。

2012-05-21 05:50

多谢了~~大神真厉害 ^_^

2012-05-19 18:49

在Emlog的模板中原来是这样输出正文内容,
<?php echo $log_content; ?>

可以改成这样去掉图片的border:
<?php
$search = '/(<img.*?)border=(["\'])?.*?(?(2)\2|\s)([^>]+>)/is';
echo preg_replace($search,'$1$3',$log_content);
?>

2012-05-19 23:53

小白再求解,输出正文内容的代码我已经改成了<?php get_content_img($value['content']); ?>
这个是获取日志缩略图的,不影响功能的前提下怎么改

2012-05-20 13:36

这样吧
<?php get_content_img(preg_replace('/(<img.*?)border=(["\'])?.*?(?(2)\2|\s)([^>]+>)/is','$1$3',$value['content']));?>

2012-05-19 13:55

小白问句~~我想写在Emlog模板里,去掉em生成的border=""改怎样写,写在哪里

2012-05-19 14:42

em生成的boder 你说的是编辑器自动添加的border="0"吗?

2012-05-19 15:05

这样做:
 admin\views\js\common.js 中
 查找 border=\"0\"
 把他替换为空