php高亮语法,实现类似百度的全文检索高亮语法显示的自定义PHP函数

/****************************************************************************

*** strKeyCut 关键词全文搜索语法显示函数

***

*** $rsstr  :待处理字符串

*** $keywords :关键词数组

*** $keycolor :是否语法高亮显示,默认=显示

*** $length  :指定字符串处理后长度,默认=200

*** $cutlen  :指定关键词前后保留文字长度,默认=10

****************************************************************************/

function strKeyCut($rsstr,$keywords,$keycolor=true,$length=200,$cutlen=10){

if (!$rsstr) return FALSE;

if (!is_array($keywords) or (1>count($keywords))) return FALSE;

$encoding=mb_internal_encoding();

mb_internal_encoding("UTF-8");//设置当前字符集为UTF8

$rsstr=preg_replace('/\s(?=\s)/', '', $rsstr); //连续的空格只保留一个

$pos=array();

foreach($keywords as $keys=>$words){ //查找关键词位置

$offset=0;

while($thepos=mb_strpos($rsstr,$words,$offset)){

$pos[]=$thepos;

$offset=$thepos+1;

}

}

sort($pos); //关键词位置按先后排序

$strs=array();

$strs[]=mb_substr($rsstr,0,$pos["0"]); //按关键词的位置分割字符串

for ($i=0;$i

$strs[]=mb_substr($rsstr,$pos[$i]);

$outstr=array(); //对已分割的字符串长度进行处理

//第一个分割串中没有关键词,单独处理

$outstr[]=(($length>mb_strlen($rsstr)) or ($cutlen>mb_strlen($strs["0"]))) ? $strs["0"] : "... " . mb_substr($strs["0"],mb_strlen($strs["0"])-$cutlen);

for ($i=1;$i

if (($cutlen+$cutlen+3)>=mb_strlen($strs[$i])) $outstr[]=$strs[$i];//如果关键词出现的位置较近,则不断句

else{

$lstr=mb_substr($strs[$i],0,$cutlen+3);//关键词后边保留一部分语句

$rstr=mb_substr($strs[$i],mb_strlen($strs[$i])-$cutlen);//下一个关键词前面保留一部分语句

$outstr[]=$lstr . " ... " . $rstr;

}

}

$outstr[]=mb_substr($strs[$i],0,$cutlen);//处理最后一个分割串

$out= implode("",$outstr);//合并分割串

$out= mb_substr($out,0,$length) . " ...";  //按指定长度作最后裁切

if ($keycolor){

foreach ($keywords as $key=>$data){

$keycolors[$key]="".$data.""; //关键词修饰

}

$out=str_replace($keywords,$keycolors,$out);

}

mb_internal_encoding($encoding);//恢复字符集

return $out;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值