问题是我不能在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'
此外,我的所有文件都已转换为没有BOM的UTF-8.我也将默认字符集添加到.htaccess文件(AddDefaultCharset utf-8
)中.
但是,我仍然得到像这里错误的回应:
{"users":"\u0442\u0435\u0441\u0442"}
Tim Groeneve.. 8
你得到的回应:
{"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
的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.netjson_encode
上的文档中看到的函数和php.net上的json_encode
预定义常量文档,JSON_UNESCAPED_UNICODE
将逐字编码多字节Unicode字符(默认为转义为\ uXXXX).
重要的是要注意,JSON_UNESCAPED_UNICODE
自PHP 5.4.0以来仅支持,因此请确保运行5.4.0或更高版本以使用它.
你得到的回应:
{"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
的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.netjson_encode
上的文档中看到的函数和php.net上的json_encode
预定义常量文档,JSON_UNESCAPED_UNICODE
将逐字编码多字节Unicode字符(默认为转义为\ uXXXX).
重要的是要注意,JSON_UNESCAPED_UNICODE
自PHP 5.4.0以来仅支持,因此请确保运行5.4.0或更高版本以使用它.