CakePHP

JSONレスポンスで日本語をエンコードをさせない

CakePHP

PHPのjson_encode()関数はデフォルトでマルチバイトUnicode文字を\uXXXXにエンコードします。

PHP: json_encode - Manual
$values = [
  'message' => 'わけがわからないよ',
];

echo json_encode($values); // {"message":"\u308f\u3051\u304c\u308f\u304b\u3089\u306a\u3044\u3088"}

これによって読みづらくなる上に、データ量が増加してしまうばかりでメリットは薄いです。
CakePHPでJsonViewを使う場合にどうやって設定するかのメモ。
CakePHP3.5で確認。

標準関数のjson_encode()は第二引数にJSON_UNESCAPED_UNICODE定数をセットするだけです。

$json = json_encode($values, JSON_UNESCAPED_UNICODE);

CakePHPでは直接指定できないので、代わりにController::viewVers['_jsonOptions']にセットしてやればおk

class AppController extends Controller
{
    public $viewVars = [
        '_jsonOptions' => JSON_UNESCAPED_UNICODE,
    ];
}
スポンサーリンク
記事を書いた人

システムえんじにゃー🐈
趣味はエレキギター、自転車など。作曲したい。
World of Warshipsやってます。
記事に関する質問はお気軽にどうぞ。

surface0 (さーふぇす)をフォローする
surface0 (さーふぇす)をフォローする

コメント

タイトルとURLをコピーしました