前提条件
Laravel 6.20.4
PHP 7.3.24
問題
Laravel6でJsonのレスポンスが文字化けしてしまう。
本来であれば、nameの部分が鈴木と表示される。
解決方法
app\Http\Controllers\Controller.phpにJSON_UNESCAPED_UNICODEを設定したレスポンスを返すfunctionを作る。
Controller.php
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function jsonResponse($data, $code = 200)
{
return response()->json(
$data,
$code,
['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'],
JSON_UNESCAPED_UNICODE
);
}
}
使い方
全てのコントローラーがController.phpを継承しているので、
$thisを使ってjsonResponseを呼び出すことができる。
UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
class UserController extends Controller
{
public function index()
{
$users = User::all();
return $this->jsonResponse($users);
}
}
参考記事