ハマログ

株式会社イーツー・インフォの社員ブログ

Laravelのjsonレスポンスでスラッシュをエスケープしない

Laravelでjson形式のレスポンスを返却する際に、内部でjson_encode関数が利用されるため、スラッシュがエスケープされて表示されます。

return response()->json([
    "active" => true,
    "iss" => "http://www.yahoo.co.jp/",
    "scope" => "openid"
]);

レスポンス

{
"active":true,
"iss":"http:\/\/www.yahoo.co.jp\/",
"scope":"openid"
}

json_encodeのJSON_UNESCAPED_SLASHESを指定すると良さそうです。
ドキュメントを確認すると以下の引数定義のため、
省略していたレスポンスコードなどをまとめて指定するようにします。

response()->json($data, $status, $headers, $options))

実装

return response()->json([
    "active" => true,
    "iss" => "http://www.yahoo.co.jp/",
    "scope" => "openid"], 200, ['Content-Type' => 'application/json'], JSON_UNESCAPED_SLASHES);

レスポンス

{
"active":true,
"iss":"http://www.yahoo.co.jp/",
"scope":"openid"
}

成功しました。JSON_PRETTY_PRINTをよく指定するようなので、合わせて指定する場合は以下のようになります。

return response()->json([
    "active" => true,
    "iss" => "http://www.yahoo.co.jp/",
    "scope" => "openid"], 200, 
    ['Content-Type' => 'application/json'], JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);

以上です。

JSONOAuthOpenIDPHP

  kaneko tomo   2016年8月8日


関連記事

CloudFrontの署名付きURLをためす(with PHP)

はじめに CloudFrontの署名付きURLを試す機会があったのでやってみまし…

LaravelのObserverでモデルの変更を検知する

はじめに Laravel Novaで記事を管理していて、パフォーマンス対策のため…

ssh config

最近自宅でMacを使うようになって、お勉強用のサーバーにSSHログインする時に …


← 前の投稿

次の投稿 →