php 给文章添加内链
假定后台已经保存了内链关键词,在输出时保存到了数组$keywords
中,文章内容保存在$content
中,如下:
$content = '<p>这是我下面对内链关键词的举例哈。我们喜欢有abc情调的生活。<div style="height:100px;">abcd</div>,现在我们就来测试1一下,如果测试结果很好,就说明测试结果有效</p>'
$keywords = array (
array('abc', 'http://www.baidu.com'),
array('abcd', 'http://www.baidu.com'),
array('测试', 'http://baidu.com', 1),
array('测试1', 'http://www.baidu.com')
);
那么,如何给文章中指定的关键词添加链接呢?而且,要考虑到,有的关键词本身就包含了另外的关键词。这里我们采用对关键词排序的做法,长度更长的关键词优先替换,已经包含<a>
标签的不再替换,于是得到如下函数:
function keyLink($content, $keywords) {
if(!$keywords) return $content;
$keywords = keywordSort($keywords);
$data = $content;
foreach($keywords as $k => $v) {
$quote = str_replace(array("'", '-'), array("\'", '\-'), preg_quote($v[0]));
$data = preg_replace('\'(?!((<.*?)|(<a.*?)))(' . $quote . ')(?!(([^<>]*?)>)|([^>]*?</a>))\'si', '<a href="' . $v[1] . '" target="_blank">' . $v[0] . '</a>', $data, 1); //数字1代表在正则中出现的替换频率 -1 或者留空表示不限制
if($data == '') $data = $content;
}
return $data;
}
function keywordSort($keywordsArr) {
usort($keywordsArr, function($a, $b) {
$al = strlen($a[0]);
$bl = strlen($b[0]);
if ($al == $bl)
return 0;
return ($al > $bl) ? -1 : 1;
});
return $keywordsArr;
}
$content = keyLink($content, $keywords); // 此即添加内链的内容