帝国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';