我使用这个简单的代码将数据库查询结果转换为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格式对数据进行编码。
有人可以帮我解决查询返回的双引号吗?谢谢。
答案 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)
$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) );