最新消息:yaf表单扩展中新增加了浮点数、日期和集合的校验。php yaf框架扩展实践三——表单

文章中关键词加链接的思路和php的实现

PHP 6376浏览 7评论

一般在文章展示的时候,都会将其中的关键词加上链接,增加网站的粘合性。咋一想挺简单的,直接替换字符串不就行了。可细细想来,还是有不少问题。比如文章内的html标签,标签里的内容可以不用替换;再比如一个关键词包含另外一个关键词,如果先替换短的关键词,那就会有问题。

针对这些问题,笔者做了一些处理,封装成了一个类,可以点击下面的链接直接下载代码:

文章中关键词加链接php代码实例

1、简要说明下实现的思路:

  • 对关键词数组进行排序,长的关键词排到前面,这样就可以先替换长的关键词。
  • 提取出所有html标签,暂存到数组里。
  • 根据html标签对内容进行分割,将分割的内容保存到一个数组里。
  • 循环分割的内容数组,替换关键词链接。
  • 将提取的html标签和分割的内容数组拼接起来,得到最终结果。

2、关键步骤的代码说明:

关键词数组排序

关键词数组$keywordArray是二维数组,结构如下:

$keywordArray = array(
    array('进程', 'http://www.01happy.com/linux-ps-view-process/')
    ,array('守护进程', 'http://www.01happy.com/linux-python-daemon/')
);

二维数组排序可以使用内置函数usort,代码如下:

usort($keywordArray, function($a, $b) {
            $al = strlen($a[0]);
            $bl = strlen($b[0]);
            if ($al == $bl)
                return 0;
            return ($al > $bl) ? -1 : 1;
        });

提取出所有html标签

preg_match_all('/<\/?[a-zA-Z]+[^>]*>/', $content, $match);
if (isset($match[0])) {
    $htmlTagArray = $match[0];
}

这边的正则就是将<>包着的内容都提取出来,笔者认为凡是需要将<>号当成内容显示的,都应当用转义字符&lt;&gt来替换,对于一切<>包着的内容都可以认为是标签。事实上浏览器也是这么干的,很多在线的文本编辑器也会自动转义这些字符。

分割内容,保存到数组

$noTagContentArray = preg_split('/<\/?[a-zA-Z]+[^>]*>/', $content);

这边用的正则表达式和上面提取html标签用的正则一致。

循环分割的内容数组,替换关键词链接

这边的处理方式是先将关键词替换成md5值,再将md5值替换成带链接的关键词,之所以这么处理,是为了解决关键词之间包含的情况。另外,笔者曾经考虑将分割的内容数组implode成一个字符串,就不用循环替换了,但是担心implode之后的字符串在拼接处会形成关键词,所以就没这么处理。

组合提取的html标签和处理后的内容

这步就比较简单了,依次拼接就OK了。需要注意的是html标签数组会比分割的内容数组长度小1,所以在取标签时,要用isset来判断下。

以上程序笔者经过多次测试,暂时没发现什么问题,分享给大家,如果有发现什么问题,可以联系我,非常感谢,我的联系邮箱参考网站右边栏目。

转载请注明:快乐编程 » 文章中关键词加链接的思路和php的实现

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (7)

  1. 这个效率有些低吧
    wzllai4年前 (2012-12-12)回复
    • 陈杰斌
      效率问题还没测试过,不过一般都会将处理结果缓存起来,所以关系比较不大。相对来讲,准确性比较重要。不知道有更好的处理方法没?
      山涧林鱼4年前 (2012-12-12)回复
  2. 其实可以考虑交给js来做
    yerhu4年前 (2013-01-10)回复
    • 陈杰斌
      这个方法也是可以的,不过会牺牲些seo。
      山涧林鱼4年前 (2013-01-10)回复
  3. 这个不错,先收藏,后面再加进去,如果能够有一个自动分词,然后找出文章中比较多的词作为关键字,然后加链接就更好了~
    红色石头4年前 (2013-04-09)回复
    • 陈杰斌
      嗯。这样子就更好了。不过这个功能可以和关键加链接分开来处理。比如在文章保存时就能提取出关键词来。
      陈杰斌3年前 (2013-10-05)回复
  4. 写的非常好,不过还有一个问题,那就是控制一篇文章超链接的次数,一篇文章超链接过多,对搜索引擎不是很友好。如果能控制关键词超链接的次数那就更好了。
    均益seo博客5个月前 (09-23)回复