windows服务器使用IIS时thinkphp搜索中文无效问题

寻技术 PHP编程 / ThinkPHP 2023年12月21日 118

在用ThinkPHP开发的网站,在linux服务器下使用过一段时间,一切正常。但是更换到windows服务器时,发现搜索的时候,无法搜索中文,查不出相应的结果。查看数据库发现数据是存在的。linux服务器下正常,而且搜索数字或字母程序正常,说明程序是没有任何问题的。那么问题肯定就出在windows服务器上了。

控制器Search.php

在搜索控制器Search.php类中找到 lists 方法,使用下面代码调试程序

$param = input('param.');
dump($param);
exit;

注:笔者使用的是thinkphp5,版本thinkphp5以上都可以使用上述代码。

发现搜索关键词参数keywords,值为空。到底是哪一步的时候被屏蔽的呢,回忆一下thinkphp的底层工作原理。

 thinkphp的底层工作原理

1. 根目录index.php运行

2. 在/thinkphp/start.php文件中,base.php加载配置(包括惯例配置文件)

3. App::run()->send();实现应用的启动。这个方法是整个框架的核心方法,简单一点说就是加载多个初始化文件、url路由转换、执行控制器方法

4. send()方法将程序执行结果返回给客户端

url路由检测处理有问题

初步猜测应该是url路由检测处理有问题,这个步骤会对参数进行分析处理。分析底层程序代码,app.php文件run方法中,调用Request.php的pathinfo方法来处理URL,使用$_SERVER['PATH_INFO']来获取参数。

iis环境解决方法

一般浏览器默认是gb2312,而我们的程序是UTF8的,所以用iconv()转换。加个iis环境判断,代码如下

if(false!==stripos($_SERVER['SERVER_SOFTWARE'],'IIS')){
    $_SERVER['PATH_INFO']=iconv('gbk', 'utf-8//IGNORE', $_SERVER['PATH_INFO']);
}

关闭

用微信“扫一扫”