《PHP去掉文章內(nèi)容中的所有外鏈并允許部分鏈接存在》要點(diǎn):
本文介紹了PHP去掉文章內(nèi)容中的所有外鏈并允許部分鏈接存在,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:PHP開發(fā)
分享一個(gè)很實(shí)用的自定義函數(shù),這個(gè)函數(shù)的功能是把文章內(nèi)容中所有的外鏈清除掉,并允許保留部分指定的鏈接。
函數(shù)非常實(shí)用,以后采集或COPY文章,不必再擔(dān)心其中的鏈接了。
調(diào)用方法:echo replaceLinks( $str, array('www.snjht.com') );
本函數(shù)已實(shí)用了很長一段時(shí)間,相當(dāng)穩(wěn)定。只要是localhost本地地址或非允許的鏈接,全部刪除
注意:
1、函數(shù)中Config('allowUrls');是維易PHP配置項(xiàng)允許的外鏈,是數(shù)組形式。需要換成你自己的。
2、函數(shù)中有Config('top_domain')是頂級域名,也需要換成你自己的,比如vephp.com這樣的頂級域名。
函數(shù)代碼:
/** * 文章外鏈處理:刪除非站內(nèi)的外部鏈接 echo replaceLinks( $str, array('www.snjht.com') ); * @param string $content 內(nèi)容 * @param array/string $allowUrls 允許的超鏈接:一般在系統(tǒng)配置項(xiàng) allowUrls 中可以設(shè)置,也可以臨時(shí)用本參數(shù)傳遞要容許的鏈接地址或域名 * 只有一個(gè)域名時(shí),可以直接用字串傳參。 * @return string **/ function replaceLinks( &$content, $allowUrls=array() ) { $cfgAllowUrl = Config('allowUrls'); #換成你的配置項(xiàng) 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,'#'); //避免組合成字串后,其中的“|”也被轉(zhuǎn)義 } $allowUrlList = join('|', $allowUrls); $allowUrlList = preg_replace("#[\n\r]#", '', $allowUrlList); $selfDomain = parse_url(SITE); //允許自己站內(nèi)鏈接 $selfDomain = $selfDomain['host']; $topDomain = $selfDomain=='localhost' ? '' : (!empty(Config('top_domain')) ? Config('top_domain') : getTopDomain($selfDomain)); //localhost 或 vephp.com 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],0,2)=='./' || substr($arr[1][$i],0,3)=='../' || substr($arr[1][$i],0,1)=='/') continue; //內(nèi)鏈 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; }
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/123.html