首页 > 其他 > 网站日记>正文

jiuhecai谈去掉内容中的超链接的方法

提示: 阅读权限:公开  

帝国cms中,采集或者复制到的文章,需要去掉超链接。在采集的设置里,可以去掉;在编辑器里也可以去掉。

但是有时候忘记了,或者别的原因,没有处理好,那就需要事后补救处理了。今天早晨,临汾的天空非常晴朗。我们一起探讨下如何去掉超链。

首先考虑用php去除,使用帝国批量王,可以方便的把保存在数据库中的newstext字段取来,脱敏后,使用正则来替换掉。使用网上搜索到的正则狗仔的测试片段为:

<?php
$str='<address>
Written by <a href="mailto:webmaster@example.com">Donald Duck</a>.<br> 
Visit us at:<br>
Example.com<br>
Box 564, Disneyland<br>
USA
</address>';
echo preg_match('#<a[^>]*>(.*?)</a>#is',$str,$match);
print_r($match);
?>

执行结果为

1Array
(
    [0] => <address>
Written by <a href="mailto:webmaster@example.com">Donald Duck</a>
    [1] => 
Written by <a href="mailto:webmaster@example.com">Donald Duck
)

那么这个正则是有瑕疵的,碰见带a开头的标签,并且这个标签中恰好有a标签,那就翻船了。虽然这种情况罕见,但是有代码洁癖的程序员不能容忍。


容易知道,a标签后边,要么是个空格,要么是大于号,所以使用零宽断言,可以修正这个bug.

<?php
$str='<address>
Written by <a href="mailto:webmaster@example.com">Donald Duck</a>.<br> 
Visit us at:<br>
Example.com<br>
Box 564, Disneyland<br>
USA
</address>';
echo preg_match('#<a(?=[s>])[^>]*>(.*?)</a>#is',$str,$match);
print_r($match);
?>

执行结果为:

1Array
(
    [0] => <a href="mailto:webmaster@example.com">Donald Duck</a>
    [1] => Donald Duck
)

完美!

最终,在帝国批量王中,处理超级链接的核心代码为:

$r[newstext]=stripcslashes($r[newstext]);
$r[newstext]=preg_replace('#<a(?=[s>])[^>]*>(.*?)</a>#is','$1',$r[newstext]);
$r[newstext]=addslashes($r[newstext]);
$listtemp='newstext';


上一篇:win7远程桌面笔记

下一篇:帝国cms搜索页伪静态的最佳实现

tags:

返回首页

相关

热门

站内直通车

[!--temp.bottomnav--]
返回顶部