问题描述:
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文件:
把:
return str_replace(urlencode('[PAGE]'), $page, $this->url);
复制代码
改成:return str_replace('[PAGE]', $page, $this->url);
复制代码
把:$this->url = U(ACTION_NAME, $this->parameter);
复制代码
改成:$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;