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