Como converter esta matriz em JSON em PHP

Eu li muitas muitas postagens sobre esse assunto e tentei muitas soluções e não posso converter essa multi-array em uma string JSON. Isso é o que eu vejo quando eu 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 ) ) ) 

Eu tento isso (com e sem parâmetro verdadeiro):

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

E eu recebo:

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

Quando eu tentar isso:

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

Eu recebi:

Aviso: utf8_encode () espera que o parâmetro 1 seja uma string, uma matriz dada em /Applications/XAMPP/xamppfiles/htdocs/cdn/php/functionsv1.php na linha 2839
[ERRO: sem erro] —– [“”] —–

Quando eu tentar isso:

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

Eu recebi:

Aviso: htmlspecialchars () espera que o parâmetro 1 seja string, matriz fornecida em /Applications/XAMPP/xamppfiles/htdocs/cdn/php/functionsv1.php on line 2839
[ERRO: sem erro] —– [null] —–

Estou realmente perdido!

NB Você vê que o idioma é francês, então temos um char com sotaque como éèàô etc …

Os dados fornecem a base de dados MySQL e o database está configurado para:

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

Estou executando o PHP 5.4.7, para mim o código a seguir funciona perfeitamente:

 $result = json_encode($result, true); 

Eu sei que você já tentou isso. A sugestão de Leonardo também funciona para mim:

 $result = json_encode($result, JSON_UNESCAPED_UNICODE); 

A questão é que no PHP 5.5.0 json_encode requer que as strings sejam UTF-8.


Então … você terá que passar uma string utf8 válida, como fazê-lo depende da codificação em que você tem suas cordas. Você está certo em pensar que precisa de utf8_encode ou function similar. Você também pode dar uma olhada no iconv .

Agora, o problema com utf8_encode é que esta function não funcionará com arrays, pois você precisa de uma function auxiliar, como:

 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; } 

Nota 1: utf8_encode aceita apenas strings no ISO-8859-1. Verifique qual codificação você está usando.

Nota 2: htmlspecialchars e htmlentities não converterão todos os caracteres de sua codificação, apenas aqueles “perigosos” ( htmlspecialchars ) ou que possuem entidades equivalentes html ( htmlentities ). Para este caso use use mb_encode_numericentity vez disso.

Nota 3: Tanto o iconv quanto o mb_encode_numericentity permitirão especificar a codificação de sua string. Além disso, eles também não trabalham com arrays, então você precisará escrever funções auxiliares recursivas para eles também.

Se você estiver usando a versão php> 5.4.0 você pode usar:

 $result = json_encode($result, JSON_UNESCAPED_UNICODE); 

Veja os documentos