LoginSignup
0
0

More than 5 years have passed since last update.

Laravel4までのBladeでエスケープしつつデータ表示は波括弧三重{{{}}}。PhpStormには設定書き換えが必要

Posted at

{{}}ですべてエスケープされるのは5から

久々にBladeテンプレートを見直して、構文などを忘れたので公式で確認してました。

Bladeテンプレート 5.1 Laravel

注意: Bladeの{{ }}文は自動的にPHPのhtmlentities関数を通し、XSS攻撃を防ぎます。

流石にテンプレート構文の書き方はそうそう変わらないだろうと5のマニュアルを読んでいて、そう言えばコードに

// e()はhtmlentities()のラッパー
{{ e('あぶないchara') }}

という記述が散見されていたのを思い出し、そうか(安全側に倒しているけど)無駄だったかと外していったら

{{ 'またまたあぶないchara' }}

見事に表示が崩れた。

慌てて調べたら、実装はこうなっていた。

class Blade {
    /**
     * Rewrites Blade echo statements into PHP echo statements.
     *
     * @param  string  $value
     * @return string
     */
    protected static function compile_echos($value)
    {
        $value = preg_replace('/\{\{\{(.+?)\}\}\}/', '<?php echo HTML::entities($1); ?>', $value);

        return preg_replace('/\{\{(.+?)\}\}/', '<?php echo $1; ?>', $value);
    }
}

ぱっと見、正規表現が見づらいので、ちゃんとエスケープしているなと思ったが、2回置換している不自然さによく見ると2重と3重で処理が分かれていた。

webでも調べなおして5から変わったとのこと。

Laravel5(Blade)のViewで改行させたいだけなのに少し悩んだ - Qiita

Laravelのbladeってやつをまとめてみた

(便利そうなの増えてる…)


直接は関係ないが、5ではe()にも変更が入った
Laravel の Blade で {{ と }} に囲まれたものは全てエスケープされるわけじゃない - 頭ん中


ちゃんと今使っているバージョンのドキュメントを、(探すのも非常に辛いですが)探しましょうという真っ当な結論です。

PHPStormではBladeテンプレート対応

{{e()}}{{{}}}では文字数にして1文字の削減。
せっかくある機能を使わないのもなんですし、三重に置き換えようとしました。

image.png

そうですよね。サポートするなら5の記法ですよね。
が、一応設定画面でold versionの対応してくれていないか見てみました。

image.png

ありました。

ネットにもありました。

Laravel 4 Blade markup and Ide Helper in PhpStorm - Stack Overflow

私のバージョンが古いのか、Content tagsとEscaped tagsの記述が逆ですね…
Stack Overflowの組み合わせが正しい気がしますが、自信がない…。
Raw Tagsは不明。

image.png

バージョンよる違いがあるかもしれませんので、ひとまず既存の設定の場所のまま古い記法に書き換えます。

image.png

エラーも解消されました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0