当前位置:  开发笔记 > 编程语言 > 正文

在Lumen(Laravel)中是否可以使用西里尔符号?

如何解决《在Lumen(Laravel)中是否可以使用西里尔符号?》经验,为你挑选了1个好方法。

问题是我不能在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.ResponseFactoryjson功能有以下特征:

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或更高版本以使用它.



1> Tim Groeneve..:

你得到的回应:

 {"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.ResponseFactoryjson功能有以下特征:

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或更高版本以使用它.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有