2016-01-13 40 views
1

我使用這個簡單的代碼轉換數據庫查詢結果到JSON格式:PHP json_encode用雙引號數據

$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格式對數據進行編碼。

有人可以幫助我如何逃避查詢返回的雙引號?謝謝。通過調用stripslashes

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

你能舉一個雙引號是什麼意思的例子嗎? –

+0

將它們插入數據庫之前將它們轉義出來?或者使用ansi? –

回答

2

json_encode已經照顧到這一點,你破壞的結果來編碼報價:

4

試試看

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

雖然此代碼可能會回答問題,但最好解釋它如何解決問題以及爲何使用它。從長遠來看,僅有代碼的答案是沒有用的。 –

+1

Supperbbb的工作,你已經保存了我的a * s好友,謝謝。 。 。 –

0

使用htmlspecialchars:

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

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

帶有的簡單數組示例字符串值。

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

也就是說,行情「會產生無效的JSON,但這只是一個 問題,如果你使用json_encode (),只是希望PHP神奇 逃脫你的報價。你需要做的Esc自己刮。。

+0

或者只是使用'json_encode' - 我們在閱讀相同的手冊嗎? – Steve

+0

分享手冊只是爲了表明json有效或無效...有很多選項aviallable在手冊中逃脫報價.. @Steve – devpro

+0

是的,當然 - 但你引用一個段落,根本不存在。也許它在2011年... – Steve