php 如何在Laravel控制器json响应时正确使用utf8_decode?

3wabscal  于 2022-12-21  发布在  PHP
关注(0)|答案(4)|浏览(184)

我在一个斗争与Laravel JSON响应工作。
我想做的是创建一个CURL请求Laravel控制器。
这就是CURL代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://dev.laravel/');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;

...这是控制器代码:

$data = array(
    'code' => ($this->code ? $this->code : 0),
    'message' => 'àèìòù',
    'data' => ''
);
return response()->json($data);

问题在于消息的重音,但是如果我只返回一个字符串并使用utf8_decode($output),重音也能正常工作,下面是一个例子:

// curl
echo utf8_decode($output);

// laravel controller
return 'àèìòù';

[更新]
另一个行不通的例子是:

$response = array(
    'code' => 200,
    'message' => 'àèìòù',
    'data' => array()
);
return response()->json($response, 200, [], JSON_UNESCAPED_UNICODE);

{"code":200,"message":"à èìòù","data":[]} // result
n53p2ov0

n53p2ov01#

在后台,Laravel使用的是json_encode。请尝试使用JSON_UNESCAPED_UNICODE-选项:

response()->json($data, 200, [], JSON_UNESCAPED_UNICODE);

JSON_未转义_统一代码

按字面编码多字节Unicode字符(默认情况下转义为\uXXXX)。PHP 5.4.0起可用。

3lxsmp7m

3lxsmp7m2#

我以前遇到过这个问题,但当我使用json_encode()函数时,它工作正常:

return json_encode($data);
fae0ux8s

fae0ux8s3#

我是这么做的:

json_encode($data, JSON_UNESCAPED_UNICODE);

无论如何,在客户端,我必须用途:

utf8_decode($response['message']);
up9lanfz

up9lanfz4#

PHP 8+允许命名参数

return response()->json($data, options: JSON_UNESCAPED_UNICODE);

相关问题