<?php
/* 用处:加亮关键词 要求:备查文章内除HTML标签外所有 < 和 > 符号分别用 < 和 > 替代 $rows['content']=str_replace("<","<",$rows[content]); $rows['content']=str_replace(">",">",$rows[content]); 可能存在问题:效率不高 忘记了大小写转换问题 $content:要加亮的备查文章 $key:关键字 */ function highlight($content,$key) { $k_fi=substr($key,0,1); //取得关键词第一个字符 $k_len=strlen($key); //计算关键词字数 $l_len=strlen($content); //计算备查文章字数 for($l_n=0;$l_n<$l_len;$l_n++) //根据备查文章字数开始循环 { $l_s=substr($content,$l_n,1); //取得备查文章当前字符 if($l_s=="<") //如果这个字符是标签的开始的话 { while($l_s!=">") //我们就寻找这个标签的关闭 { $con.=$l_s; //导入结果 $l_n++; //当然要开始取备查文章的下一个字符 $l_s=substr($content,$l_n,1); } $con.=$l_s; } elseif($l_s==$k_fi) //如果这个字符与关键词第一个字符相同的话 { $l_key=substr($content,$l_n,$k_len); //取备查文章当前位置是否匹配关键词 if($l_key!=$key) { $con.=$l_s; //导入结果 } else //如果匹配 { $l_n+=$k_len-1; //计数跳过相应字数 $con.="<span style=\"color:#f00;font-weight:bold;text-decoration:underline\">"; $con.=$key; $con.="</span>"; //加亮关键词 } } else { $con.=$l_s; //导入结果 } } return $con; }
##################### // 以下进行英文测试 #####################
//备查字符串 $str="aabbccdd<qq alt=\"aabbccdd\" />aabbccdd<aabbccdd>aabbccdd";
//关键词 $key="bc";
//调用函数 $str_hl=highlight($str,$key);
//输出打印到屏幕 echo "#####################\n"; echo " 以下进行英文测试\n"; echo "#####################\n"; echo "<p>原来的字符串</p>\n"; echo "<p>$str</p>\n"; echo "<p>" . htmlspecialchars($str) . "</p>\n"; echo "<p>关键字:$key</p>\n"; echo "<p>加亮后的字符串</p>\n"; echo "<p>$str_hl</p>\n"; echo "<p>" . htmlspecialchars($str_hl) . "</p>\n";
##################### // 以下进行中文测试 #####################
//备查字符串 $str="呵哈嘻啦酷<qq alt=\"呵哈嘻啦酷\">呵哈嘻啦酷</qq>呵哈嘻啦酷";
//关键词 $key="哈嘻";
//调用函数 $str_hl=highlight($str,$key);
//输出打印到屏幕 echo "#####################\n"; echo " 以下进行中文测试\n"; echo "#####################\n"; echo "<p>原来的字符串</p>\n"; echo "<p>$str</p>\n"; echo "<p>" . htmlspecialchars($str) . "</p>\n"; echo "<p>关键字:$key</p>\n"; echo "<p>加亮后的字符串</p>\n"; echo "<p>$str_hl</p>\n"; echo "<p>" . htmlspecialchars($str_hl) . "</p>\n";
?>
|