虽然市面上很多开源的CMS系统,都已经非常成熟,拥有内链功能或者相应的插件,但是还有一些自主开发的网站程序,并不具备自动添加内链的功能,那怎么实现呢?然后通过全百科网近来的探索研究,终于有了一些成果,今天就给大家谈一下通过PHP代码四则(每一则都是相对独立的)如何给任意网站关键字添加相应的内部链接原理、实现方法、以及实例代码分享。
一则
一个PHP自动生成关键字内链的类
<?php /** * 作者:全百科网 * 网站:http://www.quanbaike.com/ * 实例:php自动生成关键字的内链 */ include_once(dirname(__file__)."/../db/DBViewSpot.php" ); class InnerLink{ private static $spotUrlMap; /** * Generate view spots keywords link * * @param string $description * @param array $spotUrlMap * @return string */ public static function genSpotLink($basePath, $description) { if(empty(InnerLink::$spotUrlMap)){ InnerLink::$spotUrlMap = DBViewSpot::getSpotPare(); } // 排除不规则数据 if ( empty($description)) { return $description; } foreach (InnerLink::$spotUrlMap AS $spotUrlPair){ $replace = "<a target='_blank' href='http://www.quanbaike.com/".$basePath."/".$spotUrlPair[1].".html'>".$spotUrlPair[0]."</a>"; // 描述里面只有文字,没有图片,所以只要注意 a 链接 $tmp1 = explode("<a",$description); $is_replaced=false; foreach ($tmp1 as $key=>$item){ $tmp2 = explode("</a>",$item); if (sizeof($tmp2)>1) { if (substr($tmp2[0],0,1)!="a" && substr($tmp2[0],0,1)!="A"){ if ($is_replaced===false) { $tmp2[1] = InnerLink::str_replace_once($spotUrlPair[0],$replace,$tmp2[1],$is_replaced); } $tmp1[$key] = implode("</a>",$tmp2); } }else { if (is_string($item) && $is_replaced===false) { $tmp1[$key] = InnerLink::str_replace_once($spotUrlPair[0],$replace,$item,$is_replaced); } } } $description = implode("<a",$tmp1); } return $description; } /** * replace key word for one time * * @param string $needle * @param string $replace * @param string $haystack * @param bool $is_replaced * @return string */ private static function str_replace_once($needle, $replace, $haystack,&$is_replaced) { $pos = strpos($haystack, $needle); if ($pos === false) { return $haystack; } $is_replaced=true; return substr_replace($haystack, $replace, $pos, strlen($needle)); } }
二则
使用php数组为文章内容自动加内部链接的代码
PHP给文章加关键字链接,类似网易文章内容自动加链接的效果,很多php网站内容管理系统里面都有,也可以参考下里面的代码。
例子:
<?php $keys =array( array('源码下载','http://www.quanbaike.com/scxz/ymxz'), array('简历模版','http://www.quanbaike.com/scxz/word/grjlxz'), array('免费资源','http://www.quanbaike.com/scxz/免费资源'), array('技术交流','http://www.quanbaike.com/jsjl'), ); $str ="全百科网是集热点信息与网络商业资源分享的多元化信息网络平台,专注为用户提供免费的资源下载服务与个性化服务需求。"; echo $str,"<br>"; foreach($keys as $nkeys){ //print_r($nkeys);echo"<br>"; //foreach( $nkeys as $join) { //echo($join),"<br>"; if(strpos($str,$nkeys[0]) ){ $str =str_replace($nkeys[0],"<a href=http://www.quanbaike.com".$nkeys[1]." target=_blank >".$nkeys[0]."</a>",$str); } //} } echo $str; ?>
三则
php添加关联链接的代码
在做网站优化时,为了优化内链,需要将内容添加上关键字链接。那么,如果需要在内容上添加关联链接,应该如何操作呢?
方法一:手动编辑添加
方法二:使用程序在输出内容时实现,又不影响后台内容的编辑。
以下就是php自动给文章内容添加关联链接方法和示例,供大家学习参考。
Keylinks函数方法:
参数一:要处理的内容
参数二:替换次数
返回结果:处理后的内容
例子:
<?php /** * php关联链接 */ header("Content-Type:text/html;charset=utf-8"); //设置编码 $linkdatas=array( array('免费下载', 'http://www.quanbaike.com/'), array('简历模版', 'http://www.quanbaike.com/'), array('源码下载', 'http://www.quanbaike.com/'), array('全百科网', 'http://www.quanbaike.com/'), ); echo "替换前<br/>"; echo $str='全百科网是集热点信息与网络商业资源分享的多元化信息网络平台,专注为用户提供免费的资源下载服务与个性化服务需求。'; echo "<br/>替换后<br/>"; echo $str=keylinks($str,2); /** * 关联关键词替换 * @param txt $string 原字符串 * @param replacenum $int 替换次数 * @return string 返回字符串 */ function keylinks($txt, $replacenum = '') { global $linkdatas; if ($linkdatas) { $word = $replacement = array(); foreach ($linkdatas as $v) { $word1[] = '/(?!(<a.*?))' . preg_quote($v[0], '/') . '(?!.*<\/a>)/s'; $word2[] = $v[0]; $replacement[] = '<a href="' . $v[1] . '" target="_blank" class="keylink">' . $v[0] . '</a>'; } if ($replacenum != '') { $txt = preg_replace($word1, $replacement, $txt, $replacenum); } else { $txt = str_replace($word2, $replacement, $txt); } } return $txt; } ?>
四则
PHP 文章实现内链
下面说说我初步实现的方法:
1、用程序批量生成关键词和链接对应的库或手动添加关键词和链接库(库可以用数组的格式以文件的形式存储)
2、在view页面输出内容时执行查找替换的操作。上代码吧
<?php header("Content-Type:text/html; charset=utf-8"); $arr = array( "关键字" => "http://www.quanbaike.com/", "全百科网" => "http://www.quanbaike.com/", "免费下载" => "http://www.quanbaike.com/", ); ksort($arr); //对关键词排序,短词排在前面 $str = "这是我写一个关于windows和linux的测试字符串,我要从这个字符串中给相关的关键词全百科网、免费下载添加相应链接"; echo "原始字符串:" . $str . "<br/><br/>"; //遍历关键词库 foreach ($arr as $k => $v) { //查找第一次出现的关键词并替换加上对应的链接 $str= preg_replace('/'.$k.'/','<a href="'.$v.'" target="_blank">' . $k . '</a>',$str,1); } echo $str; ?>
原始字符串是:
这是我写一个关于全百科网和免费下载的测试字符串,我要从这个字符串中给相关的关键词全百科网、免费下载添加相应链接
替换完后是:
这是我写一个关于<a href="http://www.quanbaike.com/" target="_blank">全百科网</a>和
<a href="http://www.quanbaike.com/" target="_blank">免费下载</a>的测试字符串,我要从这个字符串中给相关的关键词全百科网、免费下载添加相应链接";
相信你已经对给网站自动添加内部链接的实现有一定的了解了,如果你有更好的实现方法,欢迎在评论区留言。