utf8 possibly incorrectly encoded characters php json laravel-4 utf-8

php - utf8 - malformed utf-8 characters possibly incorrectly encoded laravel



''Caracteres UTF-8 con formato incorrecto, posiblemente codificados incorrectamente'' en Laravel (5)

Estoy usando Laravel (un marco PHP) para escribir un servicio para dispositivos móviles y que los datos se devuelvan en formato JSON . En el resultado de datos hay algunos campos codificados en UTF-8 .

La siguiente declaración

return JsonResponse::create($data);

devuelve el error de abajo

InvalidArgumentException HELP Malformed UTF-8 characters, possibly incorrectly encoded Open: /var/www/html/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/JsonResponse.php } catch (/Exception $exception) { restore_error_handler(); throw $exception; } if (JSON_ERROR_NONE !== json_last_error()) { throw new /InvalidArgumentException($this->transformJsonError()); }

He cambiado:

return JsonResponse::create($data);

a

return JsonResponse::create($data, 200, array(''Content-Type''=>''application/json; charset=utf-8'' ));

Pero todavía no funciona.

¿Cómo puedo arreglarlo?


En mi caso tuve un ucfirst en la cadena de letras asiáticas. Esto no fue posible y produjo una cadena no utf8.


En mi caso, esto provoca error:

return response->json(["message" => "Model status successfully updated!", "data" => $model], 200);

pero esto no:

return response->json(["message" => "Model status successfully updated!", "data" => $model->toJson()], 200);


Escribí este método, para manejar matrices UTF8 y problemas JSON. Funciona bien con array (simple y multidimensional).

/** * Encode array from latin1 to utf8 recursively * @param $dat * @return array|string */ public static function convert_from_latin1_to_utf8_recursively($dat) { if (is_string($dat)) { return utf8_encode($dat); } elseif (is_array($dat)) { $ret = []; foreach ($dat as $i => $d) $ret[ $i ] = self::convert_from_latin1_to_utf8_recursively($d); return $ret; } elseif (is_object($dat)) { foreach ($dat as $i => $d) $dat->$i = self::convert_from_latin1_to_utf8_recursively($d); return $dat; } else { return $dat; } } // Sample use // Just pass your array or string and the UTF8 encode will be fixed $data = convert_from_latin1_to_utf8_recursively($data);


He encontrado la respuesta a este problema here

Solo haz

mb_convert_encoding($data[''name''], ''UTF-8'', ''UTF-8'');


Recibí este error y solucioné el problema con la función iconv como la siguiente:

iconv(''latin5'', ''utf-8'', $data[''index'']);