0

0

PHP分页怎么处理特殊字符_PHP分页参数特殊字符过滤【方法】

絕刀狂花

絕刀狂花

发布时间:2026-02-18 12:16:35

|

875人浏览过

|

来源于php中文网

原创

url参数含下划线等特殊字符被自动转义,是因web服务器或cgi层预处理所致;应检查原始query_string与$_get差异,禁用错误rewrite规则,统一用rawurlencode()编码参数值,校验order字段名白名单,关闭框架自动转换及nginx merge_slashes。

php分页怎么处理特殊字符_php分页参数特殊字符过滤【方法】

PHP分页中 URL 参数含下划线等特殊字符被自动转义怎么办

PHP 默认开启 magic_quotes_gpc(已废弃)或某些 Nginx/Apache 配置会把 URL 中的 _%、空格等做预处理,导致 $_GET['page_id'] 变成 page%5Fid 或直接丢失。这不是 PHP 分页逻辑出错,而是参数在到达 PHP 前就被 Web 服务器或 CGI 层“动过手脚”。

实际排查时先确认:用 var_dump($_SERVER['QUERY_STRING']) 看原始查询串是否已损坏;再对比 var_dump($_GET) —— 若二者不一致,问题出在解析层。

  • Apache 下检查是否有 AllowEncodedSlashesmod_rewrite 规则误转义
  • Nginx 中确保 location 块未启用 decode 类指令(如旧版 rewritebreak 行为异常)
  • 禁用所有框架路由中间件后再测试,排除框架自身对 $_GET 的二次 decode

分页参数含中文、emoji 或空格时 urlencode() 和 rawurlencode() 怎么选

手动拼分页链接时,必须对参数值做编码,但选错函数会导致解码失败。PHP 的 urlencode() 把空格转成 +,而标准 URI 解析器(包括浏览器地址栏、parse_url())要求空格是 %20rawurlencode() 严格按 RFC 3986 编码,更安全。

比如分页跳转到:?q=北京+朝阳&page=2,若用 urlencode('北京 朝阳') 得到 %E5%8C%97%E4%BA%AC+%E6%9C%9D%E9%98%B3,中间的 + 会被 $_GET 当作空格还原,但若原始词本就含加号(如搜索 a+b),就会错乱。

立即学习PHP免费学习笔记(深入)”;

v0.dev
v0.dev

Vercel推出的AI生成式UI工具,通过文本描述生成UI组件代码

下载
  • 统一用 rawurlencode($value) 处理每个分页参数值
  • 不要对整个 query string 再套一次 rawurlencode(),否则 &= 也被编码,链接失效
  • 前端 JS 调用 encodeURIComponent() 与后端 rawurlencode() 行为一致,可混用

用 PDO 或 MySQLi 分页时,order by 字段名含下划线被 SQL 注入误杀怎么放行

分页常带 ordersort 参数,如 ?order=user_name&sort=desc。若直接拼进 SQL:ORDER BY $_GET['order'],即使过滤了单引号也防不住字段名注入(比如传 user_name, (SELECT password FROM users LIMIT 1))。但又不能简单白名单所有带下划线的字段名——业务表字段可能动态生成。

  • 只允许预定义字段名:用 in_array($order, ['user_name', 'created_at', 'status'], true) 校验
  • 若字段名来自数据库元数据,用正则 /^[a-zA-Z0-9_]+$/ 限制,且长度不超过 64 字符
  • 绝不使用 addslashes()mysql_real_escape_string() 处理字段名——它们对标识符无效
  • 优先改用查询构建器(如 Laravel Query Builder 的 orderBy()),它内部会用反引号包裹字段名并跳过用户输入校验

TP5/ThinkPHP 分页类自动处理特殊字符却导致 URL 错乱的原因

ThinkPHP 5.x 的 Paginator 默认调用 url() 方法生成分页链接,该方法会对参数做 urlencode(),但若你手动在模板里再套一层 urlencode(),就会双重编码:比如 用户%E7%94%A8%E6%88%B7%25E7%2594%25A8%25E6%2588%25B7,PHP 解码一次只剩乱码。

更隐蔽的问题是:TP5 的 Url::build() 在开启 url_common 模式时,会把下划线自动转为驼峰(user_nameuserName),导致分页参数名和控制器接收名不一致。

  • 关闭 URL 自动转换:配置 'url_convert' => false
  • 分页链接生成统一走 $list->render(),不要自己拼 ?page= + http_build_query()
  • 自定义分页模板时,用 {$vo|rawurlencode}(TP 模板语法)仅对值编码,保留 key 不变

最易被忽略的是:Nginx 的 merge_slashes on 默认开启,当分页 URL 出现双斜杠(如 /page//2)时会静默合并,导致后续参数偏移——务必在 location 块显式写 merge_slashes off 并重启。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

332

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

285

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

601

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

380

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

131

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

81

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

69

2025.08.05

数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

985

2023.10.12

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

561

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 12万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号