2013-10-23 40 views
1

我有數據庫中的各種數據,包含字符串,整數&特殊字符。我需要將這個輸入到JSON輸出中,我可以使用json_encode轉換爲JSON時PHP數組中字符的問題

"description":"Allow support for "trends" and other processes" 

圍繞趨勢的雙引號打破它:

然而,這個驗證JSON時,因爲一些數據中包含的東西像雙引號,括號等,這打破它,例如失敗。

無論如何,我可以在編碼之前對數組中的數據進行預先調整嗎?我無法編輯數據,因此需要在SQL查詢後進行收集。

我做它沿着線:

$data = array();  
    while($row = mysql_fetch_array($execute)) 
     { 
      $data[] = array(
       "description" => $row["Descrption"], 
      ); 
     } 

然後:

print json_encode($data); 

謝謝!

編輯:

的var_dump:

["description"]=> string(79) "Allow support for "trends" and other processes" 
+3

'json_encode'應該像這樣轉義雙引號:'「description」:「允許支持\」trends \「和其他進程」'。你確定你沒有對可能會刪除它們的JSON對象字符串進行任何處理嗎? –

+0

var_dump($ data)'顯示什麼?在編碼之前確保數據是正確的。 –

+0

'json_encode' * always *生成有效的JSON(DEMO:https://eval.in/56688),您的使用方式,顯示方式或其他內容肯定有問題。你確定你看到的JSON打印沒有引號逃脫?它在哪裏顯示? –

回答

1

您確定這是您從json_encode收到的確切JSON輸出,因爲這不應該發生。一個常見的錯誤是直接從瀏覽器窗口中的頁面查找JSON輸出,其中某種解析可能已經發生。我猜測,正因爲如此,HTML實體可能會在這裏玩。在這種情況下,請嘗試查找頁面的源代碼(在大多數瀏覽器中按CTRL + U),這應該可以更準確地查看您收到的內容。
未來的提示:嘗試通過JSON查看器請求輸出結果(我通常使用jsonviewer.stack.hu),它可以讓您更好地瞭解正在處理的內容,而且還有很少的事情可以做到出錯。

0

你試過將一個簡單的字符替換?事情是這樣的:

$data[] = array(
    "description" => replace ($row["Description"], '"', '\\"'), 
); 

如果雙引號是那些interferring,是應該做的伎倆......

1

json_encode應該做的伎倆,但只有當你的PHP版本大於5.2。否則,在嘗試之前嘗試轉義所有json關鍵字。

function escapeJsonString($value) { 
    $escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c"); 
    $replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b"); 
    $result = str_replace($escapers, $replacements, $value); 
    return $result; 
} 
+0

'json_encode'甚至在PHP 5.2之前不存在,所以我不明白這會有什麼幫助。 –

+0

我在5.4.4上,不知道它爲什麼不逃避報價! :( – Alias

+0

我的意思是在給$ data []之前替換字符串'$ row [「Descrption」]' –