繁体   English   中英

PHP json_encode 数据带双引号

[英]PHP json_encode data with double quotes

我正在使用这个简单的代码将数据库查询结果转换为 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 格式对数据进行编码。

有人可以帮助我如何转义查询返回的双引号吗? 谢谢你。

您将需要htmlspecialchars而不是带有正确编码的stripslashes (UTF-8,如果您的页面使用UTF-8字符集)和ENT_QUOTES ,它将转义双引号以防止数据中断。 请参阅以下代码:

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

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

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

带有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"}

根据PHP手册:

也就是说,引用“将产生无效的JSON,但这只是一个问题,如果你使用json_encode()并且只是期望PHP神奇地逃脱你的引号。你需要自己逃避。

是的,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);

使用htmlspecialchars编码引号

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

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

您可以使用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) );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM