PHP去掉文章内容中的所有外链并允许部分链接存在
发布时间:2020-08-02 22:44:24 所属栏目:PHP 来源:互联网
导读:介绍《PHP去掉文章内容中的所有外链并允许部分链接存在》开发教程,希望对您有用。
《PHP去掉文章内容中的所有外链并允许部分链接存在》要点: 分享一个很实用的自定义函数,这个函数的功能是把文章内容中所有的外链清除掉,并允许保留部分指定的链接。 函数非常实用,以后采集或COPY文章,不必再担心其中的链接了。 调用方法:echo replaceLinks( $str,array('www.jb51.cc') ); 本函数已实用了很长一段时间,相当稳定。只要是localhost本地地址或非允许的链接,全部删除 注意: 1、函数中Config('allowUrls');是脚本之家PHP配置项允许的外链,是数组形式。需要换成你自己的。 2、函数中有Config('top_domain')是顶级域名,也需要换成你自己的,比如jb51.cc这样的顶级域名。 函数代码: /** * 文章外链处理:删除非站内的外部链接 echo replaceLinks( $str, array('www.jb51.cc') ); * @param string $content 内容 * @param array/string $allowUrls 允许的超链接:一般在系统配置项 allowUrls 中可以设置,也可以临时用本参数传递要容许的链接地址或域名 * 只有一个域名时,可以直接用字串传参。 * @return string **/ function replaceLinks( &$content, $allowUrls=array() ) { $cfgAllowUrl = Config('allowUrls'); #换成你的配置项 if(!empty($allowUrls) && !is_array($allowUrls)) $allowUrls = (array)$allowUrls; if(!empty($cfgAllowUrl)){ $allowUrls = array_merge($cfgAllowUrl, $allowUrls); } foreach ($allowUrls as $k=>$link){ $allowUrls[$k]=preg_quote($link,'#'); //避免组合成字串后,其中的“|”也被转义 } $allowUrlList = join('|', $allowUrls); $allowUrlList = preg_replace("#[nr]#", '', $allowUrlList); $selfDomain = parse_url(SITE); //允许自己站内链接 $selfDomain = $selfDomain['host']; $topDomain = $selfDomain=='localhost' ? '' : (!empty(Config('top_domain')) ? Config('top_domain') : getTopDomain($selfDomain)); //localhost 或 jb51.cc if(!empty($topDomain) && stripos($allowUrlList,$topDomain)===false) { $allowUrlList .= (empty($allowUrlList)? '' : '|') . preg_quote($topDomain,'#'); } preg_match_all("#<a [^>]*hrefs*=s*["']?([^'"]+)["']?[^>]*>(.*?)</a>#is", $content, $arr); if( is_array($arr[0]) ) { $rparr = $tgarr = array(); foreach($arr[0] as $i=>$link) { if (substr($arr[1][$i],2)=='./' || substr($arr[1][$i],3)=='../' || substr($arr[1][$i],1)=='/') continue; //内链 if( empty($allowUrlList) || !preg_match( '#(?:'.$allowUrlList.')#is', $arr[1][$i]) ) { //检查是否为允许的链接 $rparr[] = $link; $tgarr[] = $arr[2][$i]; } } if( !empty($rparr) ) $content = str_replace($rparr, $tgarr, $content); } unset($arr,$rparr,$tgarr); return $content; } (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |