YWY
YWY
2020.06.17

Thinkphp3.2 带中文参数分页错误

问题描述:



think内置page分页类 查询带中文参数分页出错误如下:


无法加载控制器:Dex/min

分页 链接为:/index.php/Back/Message/message/index/name/+%09%E6%B5%8B%E8%AF%95%E5%A7%93%E5%90%8D/p/%5BPAGE%5D.html



解决方法:修改thinkphp page类 show方法

改前:$this->url = U(ACTION_NAME, $this->parameter);

改后:$this->url = U(ACTION_NAME).'?'.http_build_query($this->parameter);

————————————————

版权声明:本文为CSDN博主「shuleibaihe」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/shuleibaihe/java/article/details/79045520



今天发现分页有中文参数会出现乱码,以前都是查询字符串或数字没有问题,所以没发现。URL在Apache上是/不会有问题,但是在IIS上用/会乱码,必须用?=这种格式才行。在网上找了半天解决办法,结合了@max0960 在某个问题下的回答,终于把分页的格式转成了?=,解决了这个问题,特此分享下,如有更多解决办法欢迎探讨。
只用改ThinkPHP\Library\Think\Page.class文件:
把:

  1. return str_replace(urlencode('[PAGE]'), $page, $this->url);

复制代码

改成:
  1. return str_replace('[PAGE]', $page, $this->url);

复制代码

把:
  1. $this->url = U(ACTION_NAME, $this->parameter);

复制代码

改成:
  1. $paramStr="";

  2.         foreach($this->parameter as $key => $value){

  3.             $paramStr = $paramStr.'&'.$key.'='.$value;

  4.         }

  5.         $paramStr = substr($paramStr,1,strlen($paramStr));

  6.         $this->url = U(ACTION_NAME).(strpos(U(),"?")?'&':'?').$paramStr;