PHP将标题搜索结果中的关键词替换标注为红色

后端开发   发布日期:2023年05月19日   浏览次数:352

PHP将标题搜索结果中的关键词替换成为标注的红色,同时在2023年1月11日后,将九品源码中搜索功能中检索着急词时标注为红色时的中文乱码BUG也修复好了 。同时保持搜索词在结果中匹配的字母大小写,又不影响原标题中的大小写样式。

代码中标明了处理想法和逻辑以下为最新代码:

function keyword_replace($keyword){
	if ($keyword!=''){
		$search_nohave   = array(",","/", "\\", ".", ";", ":", "\"", "!", "~", "`", "^", "(", ")", "?", "-", "\t", "\n", "'", "<", ">", "\r", "\r\n", "$", "&", "%", "#", "@", "+", "=", "{", "}", "[", "]", ":", ")", "(", ".", "。", ",", "!", ";", "“", "”", "‘", "’", "[", "]", "、", "—", " ", "-", "…");
		foreach ($search_nohave as $search_rep){
			$keyword = str_replace($search_rep,"",$keyword); 
		}
		return $keyword;
	}
}

function keywordlight($keyword,$rstitle){

	/*2023年1月11日后,九品源码修复被搜索词标红色BUG*/

	$keyword = keyword_replace($keyword);//替换不想要的字符可以自己修改
	$keyword = str_replace(' ','',$keyword);
	$keyword_list='';
	
	if ($keyword!==''){
		
		//将搜索的词逐个分开
		$str_qwm = '';
		for($i=0; $i<strlen($keyword); $i++){
			$str_c=mb_substr($keyword,$i,1,'gb2312');
			$keyword_list .= $str_c.",";
		}
		
		//生成搜索词数组
		$keyword_list=explode(',',trim($keyword_list,","));
		
		//去掉重复搜索词,只保留一个,生成新的搜索词数组
		$keyword_list = array_unique($keyword_list);

		//将标题分隔成循环,空格不替换保持原来的样子
		$str_title='';
		for($i=0; $i<strlen($rstitle); $i++){
			$str_d=mb_substr($rstitle,$i,1,'gb2312');
			$str_title = $str_title.$str_d.",";
		}
		
		//生成标题数组
		$str_title_list=explode(',',trim($str_title,","));	
		$echo_str='';
		
		//把标题的每一个字都循环判断,符合条件的着红色
		for($i = 0; $i <count($str_title_list); $i++){

			$title_key=$str_title_list[$i];

			//在搜索词数组中,如果数组中有$str_title_list[$i]表示是被要标红的字,注:同时判断搜索词可能是大写或是小写
			if (in_array(strtoupper($title_key), $keyword_list) || in_array(strtolower($title_key), $keyword_list)){
				
				//这是判断当前标题中的字是大写还是小写
				//因为替换后也要保持原来的大小写样式(str_replace区分大小写,直接用str_ireplace会造成不区分,可是会影响原标题大小写样式,强迫症就复杂一点多判断一下保持原样子)
				
				if (preg_match('/^[A-Z]+$/', $title_key)){//正则判断是大写
					$echo_str.=str_replace($title_key,"<font color='red'>".strtoupper($title_key)."</font>",$title_key);
				}elseif(preg_match('/^[a-z]+$/', $str)){//正则判断是小写
					$echo_str.=str_replace($title_key,"<font color='red'>".strtolower($title_key)."</font>",$title_key);
				}else{//非大小写则直接标红色
					$echo_str.=str_replace($title_key,"<font color='red'>".$title_key."</font>",$title_key);
				}
				
			}else{
				$echo_str.=$title_key;
			}
		}
		
		return $echo_str;

	}else{
		return $rstitle;
	}
	
}  

以上就是PHP将标题搜索结果中的关键词替换标注为红色的详细内容,更多关于PHP将标题搜索结果中的关键词替换标注为红色的资料请关注九品源码其它相关文章!