一、问题:去除文章中的外部链接。
二、基本思路:
1、获取本站域名网址;
2、本站域名网址换为字符串替换,我用#basehost#替换本站域名网址;
3、用正则式过滤外部链接;
4、字符串还原本站链接域名网址。
三、实现代码。
下面我的是实现代码:
//获取本站域名网址
$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'news.chongwen.com');
$basehost = "http://".$host;
//本站域名网址转换为字符串
$body = str_replace($basehost,'#basehost#',$body);
//正则式过滤所有<a>的链接
$body = preg_replace("/(<a[ /t/r/n]{1,}href=[/"']{0,}(http:[^//]|mailto:|[/.//]*/w)([^>]*)>)|(<//a>)/isU","",$body);
//还原本站网址链接
$body = str_replace('#basehost#',$basehost,$body);
这可以用函数封装:
delLink($body)
{
//获取本站域名网址
$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'news.chongwen.com');
$basehost = "http://".$host;
//本站域名网址转换为字符串
$body = str_replace($basehost,'#basehost#',$body);
//正则式过滤所有<a>的链接
$body = preg_replace("/(<a[ /t/r/n]{1,}href=[/"']{0,}(http:[^//]|mailto:|[/.//]*/w)([^>]*)>)|(<//a>)/isU","",$body);
//还原本站网址链接
$body = str_replace('#basehost#',$basehost,$body);
Return ($body);
}
四、存在的问题:
这存在个问题是如果是用本站的相对链接也会把过滤掉,目前想到的方法是把本站的相对链接全换为绝对链接。