使用PHP生成JSON数组时出现多余斜杠的问题
解决PHP生成JSON数组时出现多余斜杠的问题
兄弟,我太懂这种踩坑的感觉了!PHP转JSON出多余斜杠大多是这几个常见问题,我给你挨个梳理:
1. 不小心重复执行了JSON编码
这是最常见的情况——你可能先把数组转成了JSON字符串,然后又不小心对这个字符串再转了一次JSON,这时候原本的引号就会被转义成\",自然就出现多余斜杠了。
举个错误示范:
$output = array(...); // 你的数组 $json = json_encode($output); $json = json_encode($json); // 这里重复编码,必出问题! echo $json;
解决办法:确保只调用一次json_encode($output),直接输出或者使用这个结果就行。
2. 手动给字符串加了不必要的转义
如果你在构建数组的时候,给字符串用了addslashes这类转义函数,然后再用json_encode,就会造成重复转义——因为json_encode本身会自动处理字符串的转义需求,不需要你手动干预。
错误示例:
$first_name = addslashes("robin"); $output = array(array("first_name" => $first_name, ...)); echo json_encode($output);
解决办法:去掉所有手动添加的addslashes调用,如果已经有转义的字符串,用stripslashes(数组的话用递归处理的stripslashes_deep)清理后再编码。
3. 老环境开启了magic_quotes_gpc(PHP5.4+已移除)
如果你的PHP版本比较老(低于5.4),可能开启了magic_quotes_gpc配置,这个配置会自动对GET/POST/COOKIE的参数添加转义斜杠,导致你数组里的字符串自带斜杠,转JSON时就会出现多余的。
解决办法:
- 优先升级PHP版本(毕竟老版本不安全);
- 如果没法升级,递归处理数组去掉转义:
function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } $output = stripslashes_deep($output); $json = json_encode($output);
正确的代码示例
针对你的数组,正确的写法应该是这样的,不需要额外操作:
<?php $output = array( array( "first_name"=>"robin", "last_name"=>"sahoo", "reg_no"=>12, "paper_code"=>"BA001", "subject"=>"Mathematics" ), array( "first_name"=>"robin", "last_name"=>"sahoo", "reg_no"=>12, "paper_code"=>"BA002", "subject"=>"History" ), array( "first_name"=>"Rama", "last_name"=>"Nayidu", "reg_no"=>13, "paper_code"=>"BA001", "subject"=>"Geology" ) ); // 直接编码输出,无多余操作 $json = json_encode($output); echo $json;
如果你的字符串里包含/,不想让它被转义成\/,可以加上JSON_UNESCAPED_SLASHES参数:
$json = json_encode($output, JSON_UNESCAPED_SLASHES);
内容的提问来源于stack exchange,提问作者satya
相关产品推荐
相关产品推荐

