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('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格式就变成\/这样怎么解决啊的主要内容,如果未能解决你的问题,请参考以下文章