php 数组中有反斜杠,解析为json格式就变成\/这样怎么解决啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 数组中有反斜杠,解析为json格式就变成\/这样怎么解决啊相关的知识,希望对你有一定的参考价值。

<?
$arr=array("images/t9.jpg","images/t2.png","images/t1.png");
echo json_encode($arr);
?>

输出结果:["images\/t9.jpg","images\/t2.png","images\/t1.png"]

还有就是数组不是键值对 怎么样输出 "src":["images/t9.jpg","images/t2.png","images/t1.png","images/t5.png","images/t3.png","images/t12.jpg"]
这样的json格式

输出这样的结果是正常的["images\\/t9.jpg","images\\/t2.png","images\\/t1.png"]

 如果 js 调用   ["images/t9.jpg","images/t2.png","images/t1.png"]  会报错的

json一般用于ajax ,也就是js解析完就正常了 


你那个实现可以这样写

$arr=array("images/t9.jpg","images/t2.png","images/t1.png");

$arr = array('src'=>$arr);
echo json_encode($arr);

参考技术A 自动添加的是转义符号吧?你可以上网查一下转义符号的作用,也就是说输出的json串是正常的,如果没有转义符号js读取的时候会报错,至于你后面的问题,src应该就是键名,后面的数组就是值吧?
<?
$arr=array("images/t9.jpg","images/t2.png","images/t1.png");
echo json_encode(array('src' => $arr));
?>

PHP json_encode 反斜杠和数组名称的问题

【中文标题】PHP json_encode 反斜杠和数组名称的问题【英文标题】:PHP json_encode Problem with Backslash and Array Name 【发布时间】:2011-07-13 10:33:14 【问题描述】:

我正在将一些 postgresql 数据转换为 PHP json_encode,但我有一些问题:

json_encode 为我数据中的所有斜杠添加一个反斜杠。

在描述中出现段落标签的结尾,我认为是因为反斜杠问题...

我不希望我的数组位于以索引“0”命名但名称为“attach:”的对象内

我的 JSON 输出:

"arns":["arn":"CSC-ECN-NAUB109","problem":"description problem<\/p>",
"solution":"solution description<\/p>",
   "0":["name":"jquery.png","path":"http:\/\/arn.test.pt\/uploads\/CSC-ECN-NAUB109\/jquery.png"]] 

我的密码:

<?php 

require('includes/connection.php');

$modelos_info = (isset($_GET['models'])) ? $_GET['models'] : "none";

if($modelos_info != "none")

$sth = $dbh->query("SELECT * FROM arn_info JOIN upload2 ON (arn_info.arn=upload2.id_arn) WHERE modelos LIKE '$modelos_info ;%' OR modelos LIKE '%; $modelos_info ;%' ");

$sth->setFetchMode(PDO::FETCH_ASSOC);

$response = array();
$posts = array();

while($row = $sth->fetch())
 

$arn=$row ['arn'];
$problem=$row['problem'];
$solution=$row['solution'];
$name=$row['name'];
$path=$row['path'];

$posts_anexos['attach'] = $posts2;

$posts2[] = array('name'=> $name , 'path'=> 'http://arn.test.pt/' .$path);
$posts[] = array('arn'=> $arn , 'problem'=> $problem , 'solution'=> $solution, $posts2 );
 

$response['arns'] = $posts;

$fp = fopen('arns.json', 'w');

fwrite($fp, json_encode($response));

fclose($fp);

echo json_encode($response);


?>

谢谢

【问题讨论】:

【参考方案1】:

对于第一点,如果我尝试这样做:

$str = "this / string";
var_dump(json_encode($str));

我明白了:

string '"this \/ string"' (length=16)

还有反斜杠。

查看json.org,似乎 JSON 标准定义了字符串内部的斜线应该被转义。

所以,json_encode() 似乎在做正确的事。

如果您不想转义这些斜杠,那么您不需要有效 JSON,并且不应使用 json_encode


对于第二点,现在,你不应该使用这个:

$posts[] = array(..., $posts2 );

相反,您应该使用:

$posts[] = array(..., 'attach' => $posts2 );

这样,数组的最后一个元素将具有“附加”名称。

【讨论】:

是的,你在两点上是对的,有什么建议可以改用 json_encode 吗? 没有真正的建议,没有:使用 valid-JSON 可能比重新发明***、尝试重写某些东西更好。 或者如果你使用 PHP >= 5.3.0,使用json_encode($posts, JSON_FORCE_OBJECT) 谢谢,不,我使用的是 5.2.5。我用其他帖子解决了这个问题, $json_encoded_string = json_encode($response); $json_encoded_string = str_replace("\\/", '/', $json_encoded_string); 正斜杠可以转义,然后不必转义(就像你可以写一个'a'为'\u0061'。反斜杠和双引号需要被转义(因为它们在语法的其他部分很重要(即转义和关闭字符串以及控制字符),但其他字符不需要。RFC中给出的语法 - ietf.org/rfc/rfc4627.txt - 有它是明确的。

以上是关于php 数组中有反斜杠,解析为json格式就变成\/这样怎么解决啊的主要内容,如果未能解决你的问题,请参考以下文章

Json.NET在返回json序列化字符串时添加反斜杠

php 数组转换json中括号转义

php数组转换成json格式后汉字怎么就被解析成字母了啊

怎么过滤JSON数组中反斜杠“”,反序列化

php怎么将数组数组转化为json格式的数据

PHP json_encode 反斜杠和数组名称的问题