Come convertire questo arrays in JSON in PHP

Ho letto molti molti post su questo argomento e ho provato molte soluzioni e non riesco a convertire questo multi-arrays in una string JSON. Questo è quello che vedo quando print_r($result) :

 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 ) ) ) 

Ci provo (con e senza parametro vero):

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

E io ricevo:

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

Quando provo questo:

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

Ricevo:

Attenzione: utf8_encode () si aspetta che il parametro 1 sia string, matrix data in /Applications/XAMPP/xamppfiles/htdocs/cdn/php/functionsv1.php sulla row 2839
[ERRORE: Nessun errore] —– [""] —–

Quando provo questo:

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

Ricevo:

Attenzione: htmlspecialchars () si aspetta che il parametro 1 sia string, matrix data in /Applications/XAMPP/xamppfiles/htdocs/cdn/php/functionsv1.php sulla row 2839
[ERRORE: Nessun errore] —– [null] —–

Sono davvero perso!

NB Vedi la lingua è francese, quindi abbiamo un carattere con accento come éèàô ecc …

I dati forniti dal database MySQL e dal database sono impostati su:

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

Sto eseguendo PHP 5.4.7, per me il seguente codice funziona perfettamente:

 $result = json_encode($result, true); 

So che l'hai già provato. Il suggerimento di Leonardo funziona anche per me:

 $result = json_encode($result, JSON_UNESCAPED_UNICODE); 

Il problema è che in PHP 5.5.0 json_encode richiede che le stringhe siano UTF-8.


Quindi .. dovrai passare una string utf8 valida, come farlo dipende da quale codifica hai le tue stringhe. Hai ragione nel pensare che hai bisogno di utf8_encode o di una function simile. Puoi anche dare un'occhiata a iconv .

Ora il problema con utf8_encode è che questa function non funziona con gli arrays, per questo è necessaria una function di supporto, come ad esempio:

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

Nota 1: utf8_encode accetta solo stringhe in ISO-8859-1. Verifica quale codifica stai utilizzando.

Nota 2: htmlspecialchars e htmlentities non convertono tutti i caratteri della codifica, solo quelli "pericolosi" ( htmlspecialchars ) o che hanno entity framework; con nome html equivalenti ( htmlentities ). Per questo caso d'uso mb_encode_numberscentity invece mb_encode_numberscentity .

Nota 3: sia iconv che mb_encode_numberscentity ti permetteranno di specificare la codifica della tua string. Inoltre, non funzionano con gli arrays, quindi sarà necessario scrivere anche funzioni di supporto ricorsive.

Se stai usando la versione php> 5.4.0 puoi usare:

 $result = json_encode($result, JSON_UNESCAPED_UNICODE); 

Vedi i documenti