网站开发中使用ThinkPHP框架分页时候参数带中文,为何会查询不到数据?

2021-05-19
在开发的时候有一些网站需要做一个整站的搜索功能,当然这个的搜索只包含一部分的内容搜索,比如:新闻,产品,解决方案等几个主要模块的内容搜索
这个搜索功能一般是放在网站的导航或者底部,让浏览网站的用户可以清楚的看到,并且知道这个功能可以,在输入关键字的情况下,可以快速的搜索到一些自己想要了解的产品,新闻等内容。

在搜索的时候输入中文搜索,接收到的参数是乱码,查询数据库的时候查询不到任何信息,首先反应的是不是Form 使用get提交的时候有问题,换成post提交试一
下,发现还是一样的结果,这是前端提交代码:
<form action="{:urlrotue('***/index')}" method="get">
<div class="row por">
    <input type="submit" value="" class="submit0">
    <input type="text" placeholder="请输入搜索内容" class="search-input" name="keywords">
    <span class="search-close"></span>
</div>
</form>
面对这样的结果是一脸懵,大脑里想的是这是什么情况?一脸的问号?为什么以前做的项目没有遇到这样的问题,新项目也是使用一样的框架和方法,怎么这次就遇
到这样的问题。我在遇到这个问题的时候想着自己能解决,就没有问同事,就去度娘一顿搜索,终于找到了问题所在,说是浏览器的默认编码在作怪,需要在PHP页面添加
header("Content-Type:text/html;charset=UTF-8");这个就没有问题了,结果问题还真的解决了,能搜索出来对应关键字的信息,试了试翻页也没有问题,然后就
是把项目上传服务器进行进一步测试。结果就是又出现了新的问题,本地测试的时候一切正常,但是上传到服务器的时候,这个搜索就出现一些原因不明的问题,在输入关键字查询的时候一切都是正常的,但是当你搜索到的内容比较多的时候,你想查看第二页的搜索结果的时候,你会发现翻页到第二页的时候,页面是没有显示任何数据的。这到底是什么问题呢?下图是第一次搜索时显示正常数据的图片和翻页时候显示无数据的情况图片:



在遇到这种情况的时候我想大家的第一反应肯定跟我一样,是不是上传服务器的时候有什么东西没保存就上传上去了,然后去本地把文件一个个的检查一遍,然后确
认没问题再上传一遍,但是结果还是一样的,翻页的时候还是没有查询到任何数据。
然后就是各种排查,看看是不是分页的时候传的参数名是不是跟第一次的时候不一样,是不是a链接传参的时候漏掉了关键字,结果当然都不是这些的问题,下图是A链接的跳转链接图片:

发现也不是这个问题,然后就是继续问度娘找问题原因,不知道是不是我搜索的问题一直没有问到关键点,所以一直没有找到对的方法,实在是没办法了就问了一下同事,同事说的是因为参数带中文出现了乱码的原因,乱码?;乱码我不是已经处理了吗?怎么又有问题。很是不解,无奈叫同事把他处理过的ThinkPHP框架的分页类发我一份,我替换看一下有没有问题
下图:

结果还是一样的问题,然后只能继续问度娘,这次有了提示搜索的问题是”ThinkPHP分页有中文参数出现乱码“这个关键字,这次终于找到了问题,需要修改一下内置分页类的Page.class.php的内容,然后就是按操作把对应的内容给修改替换,上传服务器测试,这次没问题了显示正常,翻页也是正常的,下面是测试结果:

这个是需要替换前的内容:

这是替换后的:

问题到这里就已经解决了,但是也让我学到了很多,很多问题只要找到对应的关键点就能很快解决,在一个人走进死胡同的时候可以问一下身边的人,他们能给你提供一个全新的方向,这样也能让你快速的找到问题的所在。在这里提醒一下,各位遇到问题不应一味的自己研究,其实可以问一下你的同事或者前辈,毕竟你没遇到的问题,别人可能遇到过,这样还有助同事之间的交流,增加友谊。
写评论...