2016-01-13 39 views
1

我使用这个简单的代码转换数据库查询结果到JSON格式:PHP json_encode用双引号数据

$result = $mysqli->query(" 
    SELECT 
     date as a 
     , sum(sales) as b 
     , product as c 
    FROM 
     default_dataset 
    GROUP BY 
     date 
     , product 
    ORDER BY 
     date   
"); 

$data = $result->fetch_all(MYSQLI_ASSOC); 

echo stripslashes(json_encode($data)); 

的问题是,如果有数据双引号(例如,在产品列)由此查询返回。 json_encode函数不会以良好的JSON格式对数据进行编码。

有人可以帮助我如何逃避查询返回的双引号?谢谢。通过调用stripslashes

echo htmlspecialchars(json_encode($data), ENT_QUOTES, 'UTF-8'); 
+0

你能举一个双引号是什么意思的例子吗? –

+0

将它们插入数据库之前将它们转义出来?或者使用ansi? –

回答

2

json_encode已经照顾到这一点,你破坏的结果来编码报价:

4

试试看

echo json_encode($data); //properly formed json 
+1

虽然此代码可能会回答问题,但最好解释它如何解决问题以及为何使用它。从长远来看,仅有代码的答案是没有用的。 –

+1

Supperbbb的工作,你已经保存了我的a * s好友,谢谢。 。 。 –

0

使用htmlspecialchars:

$json_array = array(
'title' => 'Example string\'s with "special" characters' 
); 

$json_decode = htmlspecialchars(json_encode($json_array), ENT_QUOTES, 'UTF-8'); 
3

带有的简单数组示例字符串值。

$yourArr = array(
    'title' => 'This is an example with "double quote" check it' 
); 

// add htmlspecialchars as UTF-8 after encoded 
$encodeData = htmlspecialchars(json_encode($yourArr), ENT_QUOTES, 'UTF-8'); 

echo $encodeData; 

结果:

{"title":"This is an example with \"double quote\" check it"} 

According to PHP Manual:

也就是说,行情“会产生无效的JSON,但这只是一个 问题,如果你使用json_encode (),只是希望PHP神奇 逃脱你的报价。你需要做的Esc自己刮。。

+0

或者只是使用'json_encode' - 我们在阅读相同的手册吗? – Steve

+0

分享手册只是为了表明json有效或无效...有很多选项aviallable在手册中逃脱报价.. @Steve – devpro

+0

是的,当然 - 但你引用一个段落,根本不存在。也许它在2011年... – Steve