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("#[\n\r]#", '', $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 [^>]*href\s*=\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;
}

dawei

【声明】:唐山站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。