2014-07-10 96 views
-1

在框架中,我必須使用項目(Lithium),特定頁面上的輸出會通過json_encode()。本地和直播我嘗試用一​​個相同的數據,其結果是:json_encode()將非UTF8字符串變爲null,但在實際站點上返回false

  1. 本地返回的JSON,但有些值都變成null
  2. 生活網站 - 它返回false

在這兩種情況下,當我運行json_last_error() - 它給我int(5)。如果某些設置導致問題,我可以在兩個地方運行phpinfo()。 (本地,我用PHP 5.3。*,活是5.5.9。)

+0

那麼你的問題是什麼? – Jon

+0

我的問題是:「如何讓json_encode()返回JSON,即使在所提供的對象爲編碼包含非UTF8字符?」因爲目前我越來越'虛假'... –

回答

1

其實你需要使用json_encode的可選參數的UTF8字符的情況下

所以你可以使用

JSON_UNESCAPED_UNICODE 選項 JSON_ENCODE

實施例:

json_encode($array, JSON_UNESCAPED_UNICODE) 
+0

我試過這個,但是'json_encode()'仍然返回'false' :(...然後我得到'int(5)'如果我嘗試'json_last_error( )'。 –

0

最後 - 我使用了這個要點的一個稍微修改過的版本 - http://gist.github.com/oscar-broman/3653399 - 但不是編碼屬性 - 我刪除了所有非UTF8字符串...並且它正在工作。但是 - 我不得不修改網站使用的PHP框架......這是我真的想避免的......但......無論如何,這種方法現在可以完成這項工作:) ...

1

訪問php documentation here

儘管這裏沒有記錄在版本日誌中,但非UTF8處理行爲在5.5中發生了變化,這可能會使調試變得困難。

將一個非UTF-8字符串傳遞給json_encode()將使該函數在PHP 5.5中返回false,而它只會在以前的版本中使該字符串(僅此一個)無效。

在Latin-1的編碼的文件,寫:

$a = array('é', 1); 
var_dump(json_encode($a)); 

PHP < 5.4:string(8) "[null,1]"

PHP> = 5.5:bool(false)

PHP 5.5具有它的權利的過程(如果編碼失敗,返回false),但是當更新到5.5時可能會引入錯誤,因爲之前您可以獲得JSON的其餘部分,即使一個字符串不在UTF8中(如果此字符串未使用,您也不會通知它是零)

相關問題