网站开发中经常会遇到整站搜索功能,而搜索之后会出现大量的数据,而通常都是使用分页的形式去展示这些数据,当搜索的字段中含有中文时,就可能导致翻页出现乱码,导致翻页失效。搜索使用form表单提交的方式,前端代码:
formclass=method=getaction={:urlrotue('Search/index')}
pclass=header-form
inputtype=textclass=header-textname=qid=qplaceholder=请输入搜索关键词
ainputtype=submitclass=header-subvalue=/a
/
/form
下面是页码出现乱码的地址,点击后无法跳转到第二页的内容:
查看了ThinkPHP\Library\Think\Page.class文件后发现代码是这样的
然后只需要这样修改:
privatefunctionurl($page){
returnstr_replace(urlencode('[PAGE]'),$page,$this-url);
}
$request_url=$_SERVER[REQUEST_URI];
if(!preg_match(/\/p\/\d+/,$request_url)){
$request_url=str_replace(.html,'/p/'.urlencode('[PAGE]').'.html',$request_url);
}
$this-url=preg_replace(/\/p\/\d+\.html/,'/p/'.urlencode('[PAGE]').'.html',$request_url);
得到的正常的地址应该是这样的:
在后续的使用过程中又发现,URL在Apache上是/不会有问题,但是在IIS上用/会乱码,必须用?=这种格式才行或者到需要通过url?=传递参数时。
$this-parameter[$this-p]='[PAGE]';
$paramStr=;
foreach($this-parameteras$key=$value){
$paramStr=$paramStr.''.$key.'='.$value;
}
$paramStr=substr($paramStr,1,strlen($paramStr));
$this-url=U(ACTION_NAME).(strpos(U(),?)?'':'?').$paramStr;
得到的地址是这样的: