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

  • このエントリーをはてなブックマークに追加

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,
    ];
}
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。




コメントを残す