TP3.2.3使用page分页类对查询结果进行分页时的问题
来源:互联网 发布:纵横九州神羽进阶数据 编辑:程序博客网 时间:2024/05/16 17:44
TP3.2.3使用page分页类对查询结果进行分页时的问题
最近在完成公司的任务的时候遇到了一个小问题,因为以前没遇到过,所以浪费了很多时间,下面把遇到的问题和解决方法和大家分享一下,避免大家踩坑。
HTML部分代码
...<input type="text" name="searchInfo" value="{$searchInfo}">...
php部分代码
$searchInfo = trim(I('get.searchInfo'));......$numCount = $db->alias( 'S' )->join($join) ->field( $field ) ->where($where) ->order( $order ) ->count();$offset = 30;$page = new \Think\Page($numCount,$offset);$show = $page->show();$list = $db->alias( 'S' )->join( $join ) ->field( $field ) ->where($where) ->order( $order ) ->page($_GET['p'].",$offset") ->select();$this->assign([ 'page' => $show, 'list' => $list, 'searchBy' => [$tem => 'selected'], 'searchInfo' => $searchInfo ]);
因为查询中涉及到特殊字符空格,所以出现了以下bug:
- 第一页查询正常,但是生成的分页按钮的href链接出现了问题:空格被转化成了‘+’号,当用谷歌浏览器的时候,它会对采用urlencode编码的链接进行自动解码(你不做,浏览器会做。。),导致href链接中searchInfo的参数多了个‘+’号,所以点第二页的时候,你的查询条件就变成了多个‘+’号的searchInfo,导致什么结果都没有(好郁闷)。。
为什么会产生这个问题?
- TP3.2.3中的page类,U()方法会对生成的url进行urlencode编码,而这边采用的是HTML4编码方式进行的编码,所以空格被转化成‘+’号了。在浏览器(客户端)解码的时候,它默认采取的是RFC-3986编码方式进行解码,RFC-3986编码的结果是将空格编码成‘%20’,所以由于客户端和服务端采用不同的编码方式,‘+’号最后不能被解码,而是会原封不动的保留下来
怎么解决?
1.、统一编码,服务端也采用RFC-3986编码方式进行解码,将page类中的url()方法和U()方法中进行urlencode()编码的地方全部改为rawurlencode()编码
U()方法中:
if(!empty($vars)) { // 添加参数 foreach ($vars as $var => $val){ if('' !== trim($val)) $url .= $depr . $var . $depr . rawurlencode($val); } }
page类url()方法中:
private function url($page){ return str_replace(rawurlencode('[PAGE]'), $page, $this->url);}
2.、在通过get方式获取searchInfo的值得时候,使用urldecode()强制解码一次,使他按照HTML4编码方式进行解码
$searchInfo = urldecode(trim(I('get.searchInfo')));
3.、总之一个原则,就是统一编码和解码的规范
0 0
- TP3.2.3使用page分页类对查询结果进行分页时的问题
- 如何使用AspNetPager分页控件对动态查询的结果进行分页
- 通过查询结果进行分页
- 面试题:如何对查询结果进行分页显示
- 分页(对查询出的数据进行分页显示)
- jeesite框架学习——对查询结果为Map的集合进行分页显示
- 使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集
- ASP查询结果分页问题
- tp3.2.3分页类添加记录数
- 对统计的结果进行分页的存储过程
- java中把查询出来的结果进行分页
- 使用DNN的分页控件对DATALIST控件进行分页
- 通过查询结果进行分页 (From derny)
- hibernate之查询(给结果进行分页)
- 使用Linq查询数据进行分页时遇到的性能问题
- 对结果集进行分页SQL语句
- 适用TP3.2.3分页样式
- 使用getHibernateTemplate()进行分页查询.
- 从零开始 安装 node npm webpack
- android 百度地图GPS定位
- HTTP状态码
- <转>spark下线性模型 spark.mllib
- C语言宏中"#"和"##"的用法
- TP3.2.3使用page分页类对查询结果进行分页时的问题
- NFC功能移植pn54x系列
- 程序员面试金典: 9.9 递归和动态规划 9.11求布尔表达式的表达个数
- iOS--bool和BOOL的区别
- 使用ProceedingJoinPoint获取当前请求的方法等参数——spring mvc拦截器
- Dozer轻松实现对象间属性复制
- android 5.0后对于apk 跑32 64 的逻辑
- U8Server——分布式环境下唯一订单号生成规则
- C语言程序设计---10:利用文件保存数据