2016-07-02 38 views
1

我有關聯數組關聯數組:JSON編碼含有引號

$contents = array(); 
$contents["notes"] = "this doesn't seem like it will work"; 

(爲了簡單起見,上面的字符串實際上不在線在我的代碼所定義,它是從MySQL數據庫取回)

當我這樣做:

echo json_encode($contents, JSON_HEX_APOS); 

它靜靜地失敗,我沒有看到發送到JavaScript的任何輸出。

但是,如果數組$contents不是關聯的,JSON_HEX_APOS似乎可以將報價按原樣轉換,而json_encode可以很好地工作。

+1

你的代碼工作正常。你可以把這三行放到http://phptester.net/中,它會像你期望的那樣吐出JSON。 @pol與他的答案是正確的 - 你的原始問題包含數組未正確實例化的代碼。 –

+0

我稍微編輯了我的問題,說我的代碼中的字符串沒有在內部定義,它是從MySQL數據庫中獲取的。也許,這就是爲什麼這個錯誤無法完全重現的原因。 –

回答

1

這不是一個有效的PHP數組定義。嘗試代替,

  • 隨着PHP < 5.4:$contents = array("notes => "it'll work!")
  • 隨着PHP> = 5.4:與以上相同或$contents = ["notes" => "yey"]

然後你回聲應該工作。

- EDIT 根據您的編輯,數組現在看起來不錯。如果這不是問題,請檢查編碼錯誤echo json_last_error()

+0

謝謝指出。我編輯了我的問題。我現在詳細說明我是如何定義它的。 –

+0

我試過'echo son_last_error()',我得到了'5 = JSON_ERROR_UTF8',有什麼想法?對字符串執行'utf8_encode()'操作可以修復JSON,但字符串中的單引號會消失。也許,值得一提的是,包含單引號的字符串是從數據庫中提取的,並沒有像我的問題那樣在線定義。 –

+0

檢查你的數據庫編碼並使用[iconv](http://php.net/manual/en/function.iconv.php) – pol

1

Json_encode通常以數組爲參數。 你的代碼幾乎沒有問題。 只需調整它有點像這樣

$ contents = array();
$ contents [「notes」] =「這看起來好像不會奏效」;回覆json_encode(數組(「data」=> $ contents),JSON_HEX_APOS);