php技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > PHP编程 > php技巧 > IIS下thinkphp搜索中文

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

投稿:yin

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

在用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']);
}

到此这篇关于windows服务器使用IIS时thinkphp搜索中文无效问题的文章就介绍到这了,更多相关IIS下thinkphp搜索中文内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文