Проблема в том, что я не могу использовать русские символы в 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"}
Ответ, который вы получаете:
{"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 или новее, чтобы использовать это.
Других решений пока нет …