2013-11-28 80 views
2

我讀了很多關於此主題的許多帖子,我嘗試了很多解決方案,並且無法將此多數組轉換爲JSON字符串。這是我看到的時候我print_r($result)如何將此數組轉換爲JSON在PHP中

Array ([profiles] => 
     Array ([0] => 
       Array ([ID] => 00000000-0000-0000-0000-000000000001 
         [UserName] => Administrator GU 
         [Age] => 37 
         [CityStateCode] => Montréal 
         [OnlineSince] => En ligne depuis 6 heures 39 minutes 
         [IsPaying] => true 
         [LabelOnlineStatus] => En ligne 
        ) 
       [1] => 
       Array ([ID] => ab3dd04e-5621-11e3-b448-103f0c805f5a 
         [UserName] => Guillaume Le Genie 
         [Age] => 68 
         [CityStateCode] => Montréal 
         [OnlineSince] => En ligne depuis 1 jour 9 heures 
         [IsPaying] => true 
         [LabelOnlineStatus] => Hors-Ligne 
        ) 
       [2] => 
       Array ([ID] => 00000000-0000-0000-0000-000000000050 
         [UserName] => Baby-dragoon 
         [Age] => 25 
         [CityStateCode] => Québec 
         [OnlineSince] => En ligne depuis 5 jours 6 heures 
         [IsPaying] => true 
         [LabelOnlineStatus] => Hors-Ligne 
        ) 
      )  
    ) 

我試試這個(有和沒有真實參數):

$result = json_encode($result, true); 
$error = json_last_error_msg(); 
echo "[ERROR : $error]-----[$result]-----"; 

我收到:

[ERROR : Malformed UTF-8 characters, possibly incorrectly encoded]-----[]----- 

當我試試這個:

$result = json_encode(htmlspecialchars(utf8_encode($result))); 

我接收:

警告:函數utf8_encode()預計參數1是串,陣列中/Applications/XAMPP/xamppfiles/htdocs/cdn/php/functionsv1.php給定線
[錯誤:沒有錯誤] ----- [ 「」] -----

當我試試這個:

$result = json_encode(htmlspecialchars($result)); 

我收到:

警告:用htmlspecialchars()預計參數1是串,陣列中/Applications/XAMPP/xamppfiles/htdocs/cdn/php/functionsv1.php給定線
[ERROR:沒有錯誤] ----- [null] -----

我真的迷路了!

N.B.你看,語言是法語,所以我們有像éèàô等口音字符...

數據從MySQL數據庫提供和數據庫設置爲:

mysql_query("SET NAMES 'utf8'"); 
mysql_query('SET CHARACTER SET utf8'); 
+0

你說這是$ result2,但你試圖使用$結果 – Theraot

+0

對不起,這是一個打字錯誤!我編輯我的帖子! – LiTHiUM2525

回答

11

我運行PHP 5.4.7,對我來說,下面的代碼完美的作品:

$result = json_encode($result, true); 

我知道你已經試過了。萊昂納多的建議也適用於我:

$result = json_encode($result, JSON_UNESCAPED_UNICODE); 

的問題是,在PHP 5.5.0 json_encode要求的字符串是UTF-8。


所以..你將不得不通過一個有效的UTF8字符串,如何做到這一點取決於你有什麼編碼的字符串英寸你認爲你需要utf8_encode或類似的功能是對的。您可能還想看看iconv

現在用utf8_encode的問題是,這一功能將無法使用數組,對於你需要一個輔助功能,如:

function utf8_encode_recursive ($array) 
{ 
    $result = array(); 
    foreach ($array as $key => $value) 
    { 
     if (is_array($value)) 
     { 
      $result[$key] = utf8_encode_recursive($value); 
     } 
     else if (is_string($value)) 
     { 
      $result[$key] = utf8_encode($value); 
     } 
     else 
     { 
      $result[$key] = $value; 
     } 
    } 
    return $result; 
} 

注1:utf8_encode只接受字符串ISO-8859-1 。驗證您正在使用的編碼。

注2:htmlspecialcharshtmlentities不會轉換所有字符的編碼,只有那些「危險」(htmlspecialchars)或有命名實體的HTML當量(htmlentities)。對於此用例,請改用mb_encode_numericentity

注3:iconvmb_encode_numericentity都允許您指定字符串的編碼。此外,它們也不能與數組一起工作,所以您也需要爲它們編寫遞歸輔助函數。

1

如果您正在使用的PHP版本> 5.4 0.0你可以使用:

$result = json_encode($result, JSON_UNESCAPED_UNICODE); 

docs

+1

我使用PHP 5.5,當我試試這個:$ result = json_encode($ result,JSON_UNESCAPED_UNICODE); $ error = json_last_error_msg(); echo「[ERROR:$ error] ----- [$ result] -----」;我得到同樣的錯誤:[錯誤:格式錯誤的UTF-8字符,可能編碼不正確] ----- [] ----- – LiTHiUM2525