PHP带有双引号的json_encode数据

时间:2016-01-13 14:49:34

标签: php json mysqli

我使用这个简单的代码将数据库查询结果转换为JSON格式:

$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格式对数据进行编码。

有人可以帮我解决查询返回的双引号吗?谢谢。

6 个答案:

答案 0 :(得分:13)

您需要login: "zupa" 代替htmlspecialchars进行正确的编码(UTF-8,如果您的网页使用UTF-8字符集)和stripslashes这将避免双引号,从而阻止数据中断。请参阅以下代码:

ENT_QUOTES

答案 1 :(得分:3)

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

$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:

  

那说,引用&#34;会产生无效的JSON,但这只是一个   问题,如果您正在使用json_encode()并且只是期望PHP神奇地   逃避你的报价。你需要自己逃跑。

答案 2 :(得分:2)

json_encode已经解决了这个问题,你打算通过调用stripslashes打破结果:

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

答案 3 :(得分:0)

使用htmlspecialchars:

对引号进行编码
$json_array = array(
'title' => 'Example string\'s with "special" characters'
);

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

答案 4 :(得分:0)

是的,PHP json_encode不会“ 转义双”引号,我们需要以这种超级简单的方式手动转义那些符号-

array_walk($assoc_array, function(&$v, $k) {
  if(is_string($v) && strpos($v, '"') !== false) {
    $v = str_replace('"', '\"', $v);
  }
});
// After escaping those '"', you can simply use json_enocde then.
$json_data = json_encode($assoc_array);

答案 5 :(得分:-1)

您可以使用base64_encode和base64_decode来完成

要存储在数据库中,首先将其转换为base64_encode并存储到数据库中,如果您想要该数据,则可以使用base64_decode对该数据进行解密

$var['cont'] = base64_encode($_POST['data']);
$dd =  json_encode($var['cont']);
echo base64_decode ( json_decode($dd) );