php怎么获取参数并生成json_php参数转json格式操作【技巧】

1次阅读

php获取http参数需按请求方式区分:get用$_get,post表单用$_post,json等非表单数据必须用file_get_contents(‘php://input’)配合json_decode();$_request不推荐。

php怎么获取参数并生成json_php参数转json格式操作【技巧】

PHP怎么获取HTTP请求参数

PHP获取参数不是统一用一个函数,得看请求方式和数据格式。GET参数直接从 $_GET 拿,POST表单数据走 $_POST,但如果是前端用 fetchaxios 发的 Content-Type: application/json 请求,$_POST 是空的——这时候必须手动读原始输入流。

  • file_get_contents('php://input') 是唯一可靠方式,适用于 JSON、纯文本等非表单类请求体
  • $_REQUEST 不推荐,它混了 GET/POST/cookie,顺序和覆盖逻辑容易出错
  • $_SERVER['REQUEST_METHOD'] 先判断是 GET、POST 还是 PUT/delete,再决定怎么取

json_decode() 处理失败的常见原因

拿到原始 JSON 字符串后,json_decode() 返回 NULL 却不报错,是最常踩的坑。根本原因几乎都是编码或格式问题。

  • 前端发的 JSON 里有中文但没设 UTF-8 编码,或 PHP 文件本身不是 UTF-8(bom头也会导致解析失败)
  • 用了 JSON_UNESCAPED_UNICODE 但没传第二个参数 true,结果返回对象而非数组,后续用 $data['key'] 会报错
  • 忘记检查 json_last_error(),比如错误码 JSON_ERROR_SYNTAX 对应的是 JSON 格式错误,不是 PHP 语法问题

把 PHP 参数安全转成 JSON 输出

json_encode() 输出时,重点不是“能不能转”,而是“转出来能不能被前端正确解析”。默认行为在生产环境经常翻车。

  • 含中文时务必加 JSON_UNESCAPED_UNICODE,否则变成 u4f60u597d,前端要额外处理
  • 数据库查出来的 datetime 字段是字符串,但带时区或微秒可能触发 json_encode() 报错,建议提前用 date('c', strtotime($str)) 标准化
  • 资源类型(如 mysqli_result)或闭包不能直接 encode,会静默转成空对象或报错,需显式转换为数组
  • 输出前记得设 header:header('Content-Type: application/json; charset=utf-8');,否则某些浏览器或框架会当文本处理

调试时快速验证参数和 JSON 流程

别靠猜。本地调试时,把关键步骤打点输出,比看文档更快定位问题。

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

var_dump($_SERVER['REQUEST_METHOD']); var_dump(file_get_contents('php://input')); $data = json_decode(file_get_contents('php://input'), true); var_dump(json_last_error(), json_last_error_msg()); var_dump($data);

如果 file_get_contents('php://input') 是空字符串,说明不是 POST/PUT 请求,或者 nginx/apache 配置限制了请求体大小(如 client_max_body_size)。这些细节,不打出来根本看不到。

text=ZqhQzanResources