http://www.vipcha.net/gougou/?q=a  
正常页面。有27个相关以拼音A开头的。但是下面这些。就全都显示出来了(库里总共就329条)。以下面拼音开头的也有阿。但为什么全都显示呢?
http://www.vipcha.net/gougou/?q=d  (不知道为啥,全都显示出来了)
http://www.vipcha.net/gougou/?q=g
http://www.vipcha.net/gougou/?q=j
?q=o
?q=p
?q=r
?q=s
?q=t<?php
set_time_limit(0);
$prescription = trim($_GET['q']);
$id = intval(base64_decode($_GET['id']));$r_num = 0; //结果个数
$lan = 2;
$pf = "";
$pf_l = "";if($prescription!=""){
$dreamdb=file("pfdata/pf.dat");//读取库文件
$count=count($dreamdb);//计算行数 for($i=0; $i<$count; $i++) {
$keyword=explode(" ",$prescription);//拆分关键字
$dreamcount=count($keyword);//关键字个数
for ($ai=0; $ai<$dreamcount; $ai++) {
@eval("\$found = eregi(\"$keyword[$ai]\",\"$dreamdb[$i]\");");
if(($found)){
$detail=explode("\t",$dreamdb[$i]);
if(fmod($r_num,$lan)==0) $pf_l .= "<tr>";
$pf_l .= '<td width="'.(100/$lan).'%"><a href="?id='.base64_encode(($i+1)).'"><img src="images/'.$detail[3].'" width="80" height="60" alt="'.$detail[0].'"/></a></br>[<a href="./?q='.urlencode($detail[1]).'" class="lan">'.$detail[1].'</a>';
if(trim($detail[2],"\r\n")!="") $pf_l .= '|<a href="./?q='.urlencode($detail[2]).'" class="lan">'.trim($detail[2],"\r\n").'</a>';
$pf_l .= '] <img src="/img/dot.gif" /><a href="?id='.base64_encode(($i+1)).'">'.$detail[0].'</a></br></td>';
if(fmod($r_num,$lan)+1==$lan) $pf_l .= "</tr>";
$r_num++;
break;
}
}
}
$pf_l = '<div class="neirong"><div class="biank"><div class="dtiao"><div class="zt"><b><a href="./">犬种大全</a>:找到 <a href="./?q='.urlencode($prescription).'"><font color="#c60a00">'.$prescription.'</font></a> 的相关'.$r_num.'个</b></div></div><div class="kong"></div><div class="wenzi"><table cellpadding="5" cellspacing="10" width="100%">'.$pf_l.'</table> </p></div><div class="kong"></div></div></div> <!--内容结束--> ';
}elseif($id>0){
$dreamdb=file("pfdata/pfq.dat");//读取库文件
$count=count($dreamdb);//计算行数 $detail=explode("\t",$dreamdb[$id-1]);
$pf = '<div class="neirong"><div class="biank"><div class="dtiao"><div class="zt"><b><a href="./">犬种</a> /<a href="./?q='.urlencode($detail[2]).'">'.trim($detail[2],"\r\n").'</a> / '.$detail[0].'</b><td align="right">';
$pf .= '</td></tr><tr></div></div><div class="kong"></div><div class="wenzi"><td align="center" colspan="2"><h3>'.$detail[0].'</h3></td></tr><tr><td style="padding:5px;line-height:21px;" colspan="2"><p>犬种类型: '.$detail[5].'</p><p>最初用途: '.$detail[6].'</p><p>现在用途: '.$detail[7].'</p><p><img src="dogtu/'.$detail[8].'" alt="'.$detail[0].'"></p></td></tr>
<table cellpadding="5" cellspacing="10" width="100%">'.$pf_l.'</table></p></div><div class="kong"></div></div></div> <!--内容结束-->';
}else{
$dreamdb=file("pfdata/pf.dat");//读取库文件
$count=count($dreamdb);//计算行数 $pfl = rand(0,intval($count/30)); for($i=$pfl*30; $i<$pfl*30+30; $i++) {
if($i>=$count-1) break;
$detail=explode("\t",$dreamdb[$i]);
if(fmod($r_num,$lan)==0) $pf_l .= "<tr>";
$pf_l .= '<td width="'.(100/$lan).'%"><a href="?id='.base64_encode(($i+1)).'"><img src="images/'.$detail[3].'" width="80" height="60" alt="'.$detail[0].'"/></a></br>[<a href="./?q='.urlencode($detail[1]).'" class="lan">'.$detail[1].'</a>';
if(trim($detail[2],"\r\n")!="") $pf_l .= '|<a href="./?q='.urlencode($detail[2]).'" class="lan">'.trim($detail[2],"\r\n").'</a>';
$pf_l .= '] <img src="/img/dot.gif" /><a href="?id='.base64_encode(($i+1)).'">'.$detail[0].'</a></br></td>';
if(fmod($r_num,$lan)+1==$lan) $pf_l .= "</tr>";
$r_num++;
}
$pf_l = '<div class="neirong"><div class="biank"><div class="dtiao"><div class="zt"><b>推荐犬种'.$r_num.'个</b></div></div><div class="kong"></div><div class="wenzi"><table cellpadding="5" cellspacing="10" width="100%">'.$pf_l.'</table> </p></div><div class="kong"></div></div></div> <!--内容结束-->';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>狗狗</title>
<link href="http://www.vipcha.net/img/css/style.css?v=10915-2" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://www.vipcha.net/img/js/js.js?v=10915-2"></script></head>
<body>
<!--图片表单开始-->
<form action="" method="get" name="f1">
<input name="q" type="text" size="20" maxlength="20" value=""/>
<input type="submit" id="sub" value="查询" /></form>
<?php
if($prescription!=""){
//echo $pf_l.$pf;
echo $pf_l;
}elseif($id>0 && $id<=$count){
echo $pf;
}else{
echo $pf_l;
}
?>  
 
</body>
</html>

解决方案 »

  1.   


    @eval("\$found = eregi(\"$keyword[$ai]\",\"$dreamdb[$i]\");");
    改为
    $found = preg_match("/\t{$keyword[$ai]}\t/",$dreamdb[$i]);理由如下:
    1、ereg 系列函数自 php 5.3 起以列入淘汰之列,后改不如先改
    2、直接将变量嵌入正则规则串中,要比用 eval 效率高的多
    3、你是在整个数据行中查找关键字的,如不加入间隔符,就不能正确识别
    比如 dogSort1260785437557.jpg 就包含有 “d”、“g”等,这就是“全部输出”的原因