不得不说正则是个十分强大的功能,有了他,让我们处理一些复杂的字符变的得心应手。其实所谓的程序无非都是对字符的处理,我之前也提到过,无非都是对字符的操作,所以,会了正则,会让你在做程序开发时多了一条很便捷的途径。这里我其实也用到了用正则匹配文章中的url,进行提取域名。
因为有很多网站的文章都是拷贝的各个其他网站上的,所以有的时候里面会有一些导出链接,可能会影响网站的权重,所以,我们要对发布的文章进行一下过滤。我在这里以织梦的文章发布为例来做的。因为有些链接也是不能过滤的,比如一些自己网站的链接,或一些自己必要的外部链接。所以,我们用正则匹配文章中的url,然后提取出域名,根据域名判断是否要替换,我们可以将外部链接的链接去掉,也就是将a标签去掉。而只留下之间的部分就可以了。下面看一下代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//过滤文章中除指定域名之外的链接 $pre = '|<a[^>]*?\s*href=\\\"http://(?:.*?)\.(.*?)\.(?:.*?)/(?:.*?)\"(?:.*?)>(.*?)<\/a>|i'; preg_match_all($pre,$body,$a); if($a){ $qian = $a[0]; $home = $a[1]; $hou = $a[2]; foreach ($home as $key=>$val){ if($val=='beelink'||$val=='zoosnet'){ continue; }else{ $body = str_replace($qian[$key],$hou[$key],$body); } } } |
将这段代码加到织梦的文章发布处理文件article_add.php的$body = AnalyseHtmlBody($body,$description,$litpic,$keywords,’htmltext’);提取摘要之前就可以了。这里面用到了正则的断言。来屏蔽了一些不必要的匹配。这个正则匹配出来三部分,第一部分是整个链接,第二部分是域名,第三部分是去掉a标签后的部分。所以我们遍历第二部分,是指定的可以发布的域名就结束本次循环,如果不是,就将对应的第一部分替换为对应的第三部分。替换因为不是复杂的匹配,所以用php自带的替换就可以了,正则虽然很方便,但是他比较耗费资源,如果可以,尽量使用php自带的函数来操作。这样就可以实现将一些外部链接替换掉了!
本文链接:http://www.521php.com/archives/433/
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/433/
2013年03月27日 上午 11:24 Ashley | 引用 | #1
厉害!