thinkphp网站开发时分页乱码解决方案

原创 admin  2022-05-31 08:28  阅读 0 次

thinkphp网站开发时分页乱码解决方案、网站开发中经常会遇到整站搜索功能,而搜索之后会出现大量的数据,而通常都是使用分页的形式去展示这些数据,当搜索的字段中含有中文时,就可能导致翻页出现乱码,导致翻页失效。

网站导航

搜索使用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>

前端网页

下面是页码出现乱码的地址,点击后无法跳转到第二页的内容:

页面URL地址

程序代码

查看了ThinkPHP\Library\Think\Page.class文件后发现代码是这样的

PHP代码

然后只需要这样修改:

PHP代码2

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);

得到的正常的地址应该是这样的:

url2

在后续的使用过程中又发现,URL在Apache上是/不会有问题,但是在IIS上用/会乱码,必须用?=这种格式才行或者到需要通过url?=传递参数时。

thinkphp网站开发时分页乱码解决方案(图8)

$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;

得到的地址是这样的:

url地址2

来源:https://www.huanp.com/wangzhan/10109.html
声明:欢迎分享本文,转载请保留出处!

发表评论


表情