ThinkPHP的3.2版本有这个问题。比如搜索会员姓名:张。姓张的很多,出来几十页,第一页显示都是姓张的,但翻第二页,或其他页,出来的就乱了,完全不是搜索“张”应该出现的结果。

其实这个问题,核心是编码的问题。具体原理我就不详细说了。

要做两处修改,1、修改ThinkPHP\Conf\tags.php,在“app_begin”一项下面加一句:"Getcoding"。即原来是:

'app_begin'     =>  array(

    'ReadHtmlCache', // 读取静态缓存

),

改成

'app_begin'     =>  array(

    'ReadHtmlCache', // 读取静态缓存

    'Getcoding', // 编码

),

2、在ThinkPHP\Lib\Behavior目录下加一个文件:GetcodingBehavior.class.php,内容如下:

<?php

/**

* $_GET 编码解决url中文乱码问题

*

*/

class GetcodingBehavior extends Behavior{

    

    public function run(&$params) {

        foreach ($_GET as $k=>$v){

            if(!is_array($v)){

                if (!mb_check_encoding($v, 'utf-8')){

                    $_GET[$k] = iconv('gbk', 'utf-8', $v);

                }

            }else{

                foreach ($_GET['_URL_'] as $key=>$value){

                    if (!mb_check_encoding($value, 'utf-8')){

                        $_GET['_URL_'][$key] = iconv('gbk', 'utf-8', $value);

                    }

                }

            }

        }

    }

好了,关于ThinkPHP解决搜索中文翻页后条件失效的问题,本文就介绍这么多,希望对大家有所帮助!

03-14 21:42