我正在使用这个简单的代码将数据库查询结果转换为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));
Run Code Online (Sandbox Code Playgroud)
问题是如果此查询返回的数据中存在双引号(例如,在产品列中).json_encode函数不会以良好的JSON格式对数据进行编码.
有人可以帮我如何转义查询返回的双引号?谢谢.
Naq*_*lik 17
您将需要htmlspecialchars而不是stripslashes使用正确的编码(UTF-8,如果您的页面使用UTF-8字符集)ENT_QUOTES,它将转义双引号,防止数据中断.请参阅以下代码:
echo htmlspecialchars(json_encode($data), ENT_QUOTES, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
json_encode已经解决了这个问题,您正在通过调用来破坏结果stripslashes:
echo json_encode($data); //properly formed json
Run Code Online (Sandbox Code Playgroud)
带有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;
Run Code Online (Sandbox Code Playgroud)
结果:
{"title":"This is an example with \"double quote\" check it"}
Run Code Online (Sandbox Code Playgroud)
也就是说,引号 " 会产生无效的 JSON,但这只是一个问题,如果您使用 json_encode() 并且只是希望 PHP 神奇地转义您的引号。您需要自己进行转义。
| 归档时间: |
|
| 查看次数: |
24083 次 |
| 最近记录: |