Можно ли использовать символы кириллицы в Lumen (от Laravel)?

Проблема в том, что я не могу использовать русские символы в response()->json() метод.
Я уже пробовал следующий код:

return response()->json(['users' => 'тест']);

and

return response()->json(['users' => mb_convert_encoding('тест', 'UTF-8')]);

and

return response()->json(
['users' => mb_convert_encoding('тест', 'UTF-8')])
->header('Content-Type', 'application/json; charset=utf-8');

Я проверил кодировку по умолчанию:

mb_detect_encoding('тест'); // returns 'UTF-8'

Также все мои файлы были конвертированы в UTF-8 без спецификации. Я добавил набор символов по умолчанию в файл .htaccess (AddDefaultCharset utf-8) также.

Но я все еще получаю неправильный ответ, как здесь:

{"users":"\u0442\u0435\u0441\u0442"}

5

Решение

Ответ, который вы получаете:

 {"users":"\u0442\u0435\u0441\u0442"}

действительно JSON!

При этом, если вы не хотите кодировать символы UTF-8, вы можете просто сделать это:

 $data = [ 'users' => 'тест' ];
$headers = [ 'Content-Type' => 'application/json; charset=utf-8' ];

return response()->json($data, 200, $headers, JSON_UNESCAPED_UNICODE);

Выход будет тогда

 {"users":"тест"}

Вызов response() Помощник создаст экземпляр Illuminate\Routing\ResponseFactory, ResponseFactory«s json Функция имеет следующую подпись:

public function json($data = [], $status = 200, array $headers = [], $options = 0)

призвание json() создаст новый экземпляр Illuminate\Http\JsonResponse, который будет классом, ответственным за бег json_encode для ваших данных. Внутри setData функция в JsonResponseваш массив будет закодирован с $options предоставляется на response()->json(...) вызов:

 json_encode($data, $this->jsonOptions);

Как вы можете видеть на документация на php.net для json_encode функция и документация на php.net для json_encode Предопределенные константы, JSON_UNESCAPED_UNICODE будет кодировать многобайтовые символы Unicode буквально (по умолчанию экранируется как \ uXXXX).

Важно отметить, что JSON_UNESCAPED_UNICODE поддерживается только с PHP 5.4.0, поэтому убедитесь, что вы используете 5.4.0 или новее, чтобы использовать это.

8

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector