网站开发中经常会遇到整站搜索功能,而搜索之后会出现大量的数据,而通常都是使用分页的形式去展示这些数据,当搜索的字段中含有中文时,就可能导致翻页出现乱码,导致翻页失效。
搜索使用form表单提交的方式,前端代码:
<form class="" method="get" action="{:urlrotue('search/index')}">
<div class="header-form">
<input type="text" class="header-text" name="q" id="q" placeholder="请输入搜索关键词">
<a><input type="submit" class="header-sub" value=""></a>
</div>
</form>
下面是页码出现乱码的地址,点击后无法跳转到第二页的内容:
查看了thinkphp\library\think\page.class文件后发现代码是这样的
然后只需要这样修改:
private function url($page){
return str_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->parameter as $key => $value){
$paramstr = $paramstr.'&'.$key.'='.$value;
}
$paramstr = substr($paramstr,1,strlen($paramstr));
$this->url = u(action_name).(strpos(u(),"?")?'&':'?').$paramstr;
得到的地址是这样的:
如何掌握网站创新,提高网站排名-网站建设百度站长工具之移动友好度检测-看看自己的网站是否适合移动浏览网页设计的方向武汉到响水物流专线建立网站如何降低成本济南到平凉物流专线芜湖到克孜勒苏物流专线网站空间的稳定性对网站推广的影响