遍历数组,在正则匹配前进行strpos查找%确定有urlencode的字符后才进行decode并做中文匹配。
更进一步的话,可以自行计算%后面的字符序列是否为普通ASCII字符。不过我觉得你可以从更根源的地方开始考虑这个问题,一开始选取数据的时候,就用:SELECT name FROM tbl_name WHERE name regexp '%[a-zA-Z0-9]{2}'这样的话读到内存中的数据量会少一些,可以前面查找%的步骤,性能方面应该也会更好一些。

解决方案 »

  1.   

    我试着把关键字先urlencode后再放到SQL语句里面查询,貌似没有效果~!
      

  2.   

    想到一个好的方法了,呵呵!
    使用文件缓存的思路,先将所有数据读出,进行字符匹配,完成后把数据存入到文本中。设置一个数据更新的时间段,每次有提交查询的时候先检查数据缓存文件是否存在,时间是否在设置的时间段内,如果满足条件则直接拿关键子文本数据里的数据进行匹配,否则从新重数据库中重新获取数据。效率相对要比每次去读完数据库数据完成要高!各位PHP大哥们可否帮小弟看看这方法可行否?
      

  3.   


    你的查询语句? 如果有精确的关键字,其urlencode的结果是确定的,肯定可以用于查询。
      

  4.   

    有很多需要考虑的地方,你的编码是什么?你要查询的是中文还是什么?效率最高的是使用sql语句中就查询完成
      

  5.   

    我的SQL 语句是$str = urlencode("小猪");"select * from table where key link {$str}"
      

  6.   

    SELECT name FROM tbl_name WHERE name regexp '%[a-zA-Z0-9]{2}'
      

  7.   

    还是SQL效率高呗,什么文件缓存我看还是不怎么行。I/O 数据库会快点。