关键词
ThinkPHP 搜索 中文 翻页 条件失效
摘要
本文介绍在ThinkPHP框架中,搜索输入中文时,如果结果不止一页,翻后面页时,搜索条件失效的问题。
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解决搜索中文翻页后条件失效的问题,本文就介绍这么多,希望对大家有所帮助!