gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:49:43 24 4
gpt4 key购买 nike

问题是我不能在 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"}

最佳答案

您得到的响应:

 {"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)函数 json($data = [], $status = 200, array $headers = [], $options = 0)

调用 json() 会创建一个新的 Illuminate\Http\JsonResponse 实例,这将是负责运行 json_encode 的类你的数据。在 JsonResponsesetData 函数中,您的数组将使用 response()->json( ...) 调用:

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

正如您在 documentation on php.net for the json_encode function 上看到的那样和 documentation on php.net for the json_encode Predefined Constants , JSON_UNESCAPED_UNICODE 将逐字编码多字节 Unicode 字符(默认转义为\uXXXX)。

请务必注意 JSON_UNESCAPED_UNICODE 仅在 PHP 5.4.0 后才受支持,因此请确保您运行的是 5.4.0 或更新版本才能使用它。

关于php - 是否可以在 Lumen(by Laravel) 中使用西里尔符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34029150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com