PHP中URL传递JSON数据后无法获取值问题排查
问题分析与解决方案
兄弟,你遇到的问题核心是跳转时没有对JSON字符串进行URL编码,导致传递的JSON数据在URL中被浏览器/服务器解析破坏,最终json_decode失败,自然读不到数据。
为什么会出错?
URL里的特殊字符(比如{、}、"这些)都有专属的解析规则,直接把JSON拼到URL里,浏览器会自动拆解这些字符,导致你传递的jsondata参数内容不完整或者格式损坏。比如你原来的URL里的{"error":"ok",...},其中的双引号会被URL解析器当成参数值的分隔符,最终服务器拿到的jsondata可能是残缺的片段,json_decode自然返回null,所以读取$result['result']['amount']就会显示为空。
修复步骤
1. 跳转页面:对JSON进行URL编码
在跳转前,用urlencode()函数把JSON字符串转成URL安全的格式,特殊字符会被转义成浏览器能正确识别的编码:
$jsondata = json_encode($jsondata); // 关键:对JSON字符串做URL编码 $encodedJson = urlencode($jsondata); header('Location: index.php?a=something&jsondata=' . $encodedJson); exit; // 一定要加exit,避免后续代码继续执行
2. 接收页面:解码并添加错误检查
PHP的$_REQUEST/$_GET会自动对URL编码的参数进行解码,直接使用即可,但建议加上错误检查方便调试:
if (isset($_REQUEST['jsondata'])) { $jsonStr = $_REQUEST['jsondata']; $result = json_decode($jsonStr, true); // 检查JSON解码是否成功 if (json_last_error() === JSON_ERROR_NONE) { // 现在就能正常读取数据了 echo $result['result']['amount']; } else { // 调试用:输出解码错误信息 echo 'JSON解码失败:' . json_last_error_msg(); } }
额外提示
- 尽量避免在URL里传递复杂的JSON数据,尤其是数据量较大的时候,URL有长度限制(不同浏览器/服务器限制不同),这种情况建议用POST方式传递。
- 跳转后一定要加
exit或die(),防止后续代码继续执行导致意外问题。
内容的提问来源于stack exchange,提问作者remedcu
相关产品推荐
相关产品推荐

