PHP带有双引号的json_encode数据

Bra*_*jns 5 php json

我正在使用这个简单的代码将数据库查询结果转换为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)

  • Supperbbb工作,你已经保存了我的朋友,谢谢... (2认同)

Ste*_*eve 7

json_encode已经解决了这个问题,您正在通过调用来破坏结果stripslashes

echo json_encode($data); //properly formed json
Run Code Online (Sandbox Code Playgroud)


dev*_*pro 5

带有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)

根据 PHP 手册:

也就是说,引号 " 会产生无效的 JSON,但这只是一个问题,如果您使用 json_encode() 并且只是希望 PHP 神奇地转义您的引号。您需要自己进行转义。