在做毛票票搜索功能时,想让用户检索关键词之后能在标题中标红色提示,同时又不影响原标题所显示的状态,就写了这个函数。用于替换标题中指定字符的颜色,同时兼顾了大多数以编程为主的网站经常出现大小写字母标题类的处理办法。
这个问题其实自己早就发现了,到今天闲下来了,才想起解决,PHP代码共享了。
function keywordlight($keyword,$rstitle,$jingdu){//关键词加亮 jingdu =0 开启模糊,其余任何值为精确,但必须有初始值 //keywordlight($title_search,clear_all($rs["title"]),'0'); $rstitle=htmlspecialchars_decode($rstitle);//将被转义的字符转回HTML实体 if ($keyword!==''){ if ($jingdu=='0'){//开启模糊查询,利用区位码单字分隔 $str_qwm = ''; for($i=0; $i<strlen($keyword); $i++){ $str_c=(@ord($keyword[$i])>0xa0?substr($keyword, $i++, 2):substr($keyword, $i, 1));//将字以空格断开 $str_qwm = $str_qwm.$str_c." "; } $keyword=$str_qwm; } $word = explode(' ',$keyword); $length = count($word); for($iop = 0; $iop < $length; $iop++){ /* 毛票票是以PHP编程为主,标题中经常会出现大小写字母的英文。 为了保持原标题的状态,保持标红着色同时还不能改变原标题中的大写或小写,需要将关键词替换两次处理 */ for($e=0;$e<mb_strlen($word[$iop]);$e++){//不管是字还是字符串,都再分解成单字符 $mubiao=mb_substr($word[$iop],$e,1,'GBK');//mb_strlen和mb_substr主要解决中文截取乱码的问题 //$mubiao=$word[$iop]; $rstitle=str_replace(strtoupper($mubiao),"{##}".strtoupper($mubiao)."{@@}",$rstitle);//大写字母替换一遍 $rstitle=str_replace(strtolower($mubiao),"{##}".strtolower($mubiao)."{@@}",$rstitle);//小写字母再替换一遍 } } $rstitle=str_replace("{##}","<span style='color:#FF0000;' >",$rstitle); //转换成特殊标记,标题不能含有特殊文字 $rstitle=str_replace("{@@}","</span>",$rstitle); return $rstitle; }else{ return $rstitle; } }
{#A#}和{@B@}只是做为模板替换的标记符号
函数调用方法:
<? $title=keywordlight($title_search,$rs["title"],'0'); ?>