如何将 URL 查询字符串安全解析为 PHP 关联数组

秋强酱_8743

秋强酱_8743

2026-01-29

266人浏览

原创

如何将 URL 查询字符串安全解析为 PHP 关联数组

本文介绍使用 php 内置函数 `parse_str()` 将 `http_build_query()` 生成的 url 参数字符串准确还原为原始关联数组,避免手动分割导致的键值解析错误。

在 Web 开发中,我们常通过 http_build_query() 将关联数组序列化为标准的 URL 查询字符串(如 approval=1&record=8&employee=2),用于构造跳转链接或 API 请求参数。但当需要从该字符串反向还原为 PHP 数组时,切勿使用 explode('&', $str) 配合 json_encode()——这种方式仅得到带等号的字符串片段数组(如 ["approval=1", "record=8"]),完全丢失了键值对结构,也无法正确处理 URL 编码、空格、特殊字符(如 +、%20、& 在值中)等边界情况。

✅ 正确且唯一推荐的方式是使用 PHP 原生函数:parse_str()。

// 假设这是你通过 http_build_query 生成的查询字符串
$approve = http_build_query([
    "approval" => 1,
    "record"   => $recordId,   // 例如 8
    "employee" => $userid,      // 例如 2
    "hod"      => 9
]);
// $approve 的值示例: "approval=1&record=8&employee=2&hod=9"

// 安全、标准、自动解码地还原为关联数组
parse_str($approve, $array);

// 此时 $array 即为原始结构:
// [
//   'approval' => '1',
//   'record'   => '8',
//   'employee' => '2',
//   'hod'      => '9'
// ]
print_r($array);

⚠️ 注意事项:

jm-jsjkxyjs02-zlm-405
jm-jsjkxyjs02-zlm-405

使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。

下载
  • parse_str() 会自动对 URL 编码内容进行解码(如 %20 → 空格,+ → 空格),无需额外调用 urldecode();
  • 第二个参数 $array 是引用传参,函数本身无返回值,务必传入一个变量名;
  • 若需转换为 JSON,可在解析后使用 json_encode($array),而非对原始字符串操作;
  • 不要省略第二个参数(即不要写 parse_str($approve)),否则解析结果将注入到当前作用域的变量中(如 approval、record 变量),存在安全隐患和命名冲突风险。

? 扩展提示:若需兼容更复杂的嵌套数组(如 user[name]=John&user[age]=30),parse_str() 同样支持(PHP 7.2+ 默认启用 PHP_INI_SYSTEM 兼容模式),但建议对关键业务数据做 is_array() 和 isset() 校验,确保结构预期。

总之,parse_str() 是专为解析 URL 查询字符串而生的标准工具——简洁、健壮、符合 RFC 规范,应作为首选方案。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2235

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3602

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1196

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

4139

7

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1858

5

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

2964

5

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

6264

49

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

2023.11.24

6189

6

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

2024.03.22

7774

16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习