免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2094 | 回复: 1

如何使用php做站内搜索并高亮显示关键字? [复制链接]

论坛徽章:
0
发表于 2011-12-30 15:31 |显示全部楼层
如何使用php做站内搜索并高亮显示关键字?
  1. <?php       require_once 'sqlTools.class.php';//封装类,可执行dql、dml语句       $info=$_POST['info'];       $sql="select name,password,email from user_500 where name like '%$info%' or password like '%$info%' or email like '%$info%'";       $sqlTools=new  SqlTools();       $res=$sqlTools->execute_dql($sql);       while ($row=mysql_fetch_assoc($res)){              $row['name']=preg_replace("/($info)/i","<b style=\"color:red\">\\1</b>",$row['name']);              $row['password']=preg_replace("/($info)/i","<b style=\"color:red\">\\1</b>",$row['password']);              $row['email']=preg_replace("/($info)/i","<b style=\"color:red\">\\1</b>",$row['email']);              echo $row['name']."-->".$row['password']."-->".$row['email']."<br>";       }    ?>
  2. 复制代码
复制代码
思路分析:

将sql语句中包含的%$info%交给DBMS执行的时候,他会查找字段中含有变量$info的值的信息,
%$info--->查找以$info的值结束的信息
$info%--->查找以$info的值开头的信息
通过正则函数preg_replace()将搜索到的关键字高亮显示,比如,
   
  1. $row['name']=preg_replace("/($info)/i","<b style=\"color:red\">\\1</b>",$row['name']);
复制代码
    的意思是:通过POST方接收到的值$info替换为加上样式(红色加粗)的结果,并将结果重新赋给$row[‘name’]

如果要搜索多个关键字的话,可以对接收到值$info进行分割,比如$info_more=explode(" ",$info);//这种方式能对以空格隔开的关键字进行分割,再对分割后的结果挨个进行查询,同样,可以使用正则表达式函数进行替换工作,以高亮显示关键字


sqlTools.class.php的源代码:
  1. <?php       class SqlTools{              private $host="localhost";              private $dbname="test";              private $dbuser="root";              private $dbpwd="";              private $conn;              public function __construct(){                     $this->conn=mysql_connect($this->host,$this->dbuser,$this->dbpwd);                     if(!$this->conn){                            die("连接数据库失败".mysql_error());                     }                     mysql_select_db($this->dbname,$this->conn) or die("找不到该数据库".mysql_error());                     mysql_query("set names utf8");              }              public function execute_dml($sql){                     $bool=mysql_query($sql);                     if ($bool){                            if ($bool>0) {                                   return 1;                            }else{                                   return 2;                            }                     }else {                            return 0;                     }              }              public function execute_dql($sql){                     $res=mysql_query($sql);                     return $res;              }              public function close_conn(){                     mysql_close($this->conn);              }       }?>
  2. 复制代码
复制代码
转载请注明:http://www.cnblogs.com/hongfei/a ... hlight_keyword.html


论坛徽章:
0
发表于 2011-12-30 17:21 |显示全部楼层
有爱的楼主希望与楼至多多交流
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP