Я использую Laravel (фреймворк) для записи службы для мобильных устройств и данных, возвращаемых в формате JSON
. В результате данных есть несколько полей, закодированных в UTF-8
.
Следующее утверждение
return JsonResponse::create($data);
возвращает ошибку ниже
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()); }
Я изменился:
return JsonResponse::create($data);
в
return JsonResponse::create($data, 200, array('Content-Type'=>'application/json; charset=utf-8' ));
но он все еще не работает.
Как я могу это исправить?
Я написал этот метод для обработки массивов UTF8 и JSON. Он отлично работает с массивом (простым и многомерным).
/** * 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); if (!is_array($dat)) return $dat; $ret = array(); foreach ($dat as $i => $d) $ret[$i] = self::convert_from_latin1_to_utf8_recursively($d); return $ret; } // Sample use // Just pass your array or string and the UTF8 encode will be fixed $data = convert_from_latin1_to_utf8_recursively($data);
В моем случае это вызывает ошибку:
return response->json(["message" => "Model status successfully updated!", "data" => $model], 200);
но это не так:
return response->json(["message" => "Model status successfully updated!", "data" => $model->toJson()], 200);