美文网首页php相关PHP经验分享
关键词高亮(指出关键词数组)

关键词高亮(指出关键词数组)

作者: CleraSuke | 来源:发表于2017-11-16 13:42 被阅读27次

/**

* 关键词高亮

*

* @param  string      $content      要处理的文本

* @param  string|array $segs          要高亮的关键词或关键词数组

* @param  integer      $length        截取长度

* @param  string      $before_match  匹配之前插入的文本

* @param  string      $after_match  匹配之后插入的文本

* @param  string      $suffix        后缀

* @return string  关键词高亮之后的文本

*/

function hightLight($content, $segs, $length = 100, $before_match = '',

$after_match = '', $suffix = "...")

{

// 先截取指定长度

$content = truncate($content, $length, $suffix);

if (is_array($segs)) {

// 过滤重复

$segs = array_unique($segs);

if (count($segs) == 1) {

$segs = $segs[0];

}

}

if (is_string($segs)) {

// 如果只有一个关键词,直接替换就好了

return str_replace($segs, $before_match . $segs . $after_match, $content);

} else {

// 按长度倒序排序

if(is_array($segs)){

foreach ($segs as $seg) {

$temp[$seg] = mb_strlen($seg, "utf-8");

}

}

arsort($temp);

// 搜索关键词位置

$positions = array();

$content_len = mb_strlen($content, "utf-8");

if (is_array($temp)) {

foreach ($temp as $seg => $len) {

$offset = 0;

while ($offset < $content_len

&& ($pos = mb_strpos(mb_strtolower($content, "utf-8"), mb_strtolower($seg, 'utf-8'), $offset, "utf-8")) !== FALSE)

{

if (!isset($positions[$pos])) {

$seg = mb_substr($content, $pos, $len, "utf-8");

$positions[$pos] = array($seg, $len);

}

$offset = $pos + $len;

}

}

}

// 没有匹配的词? 直接返回

if (!$positions) {

return $content;

}

// 将位置排序

ksort($positions);

$offset = 0;

$result = "";

foreach ($positions as $pos => $val) {

list($seg, $len) = $val;

if ($pos >= $offset) {

if ($pos != 0) {

$result .= mb_substr($content, $offset, $pos - $offset, "utf-8");

}

$result .= $before_match . $seg . $after_match;

$offset = $pos + $len;

} else if ($pos + $len > $offset) {

$result = mb_substr($result, 0, -(mb_strlen($after_match, "utf-8") + $offset - $pos), "utf-8");

$result .= $seg . $after_match;

$offset = $pos + $len;

}

}

// 拼接剩余的部分

$result .= mb_substr($content, $offset, $content_len, "utf-8");

// 返回结果

return $result;

}

}

相关文章

网友评论

    本文标题:关键词高亮(指出关键词数组)

    本文链接:https://www.haomeiwen.com/subject/ccelvxtx.html