2

テンプレートに、jaavascript配列に変換したい文字列の配列を渡します。

コントローラファイル(php):

$myVar = array('a','b','c');

必要なhtml:

var myVar = ["a","b","c"];

私は次のコード(小枝)を試します:

var myVar = ["{{ myVar | join('","') }}"];

しかし、小枝ジェネレーターは引用符をhtmlエンティティに変換し、これが結果です。

var myVar = ["a","b","c"];

いくつかのアイデア?

4

2 に答える 2

5

rawフィルタを適用する必要があります。

var myVar = ["{{ myVar | join('","') | raw }}"];
于 2012-07-19T14:57:20.007 に答える
0

Maerlynの答えは機能しますが、myVar配列の値も生で出力されるという欠点があります。これは、その変数の出所によっては、XSSなどのWebサイトに脆弱性をもたらす可能性があります。

配列値のエスケープを維持しながら、これを行う2つの方法を見つけました。1つ目は、ステートメントを含むループを使用して、ifそれが最後の反復であるかどうかを確認し、結合で使用される「接着剤」を出力する必要があるかどうかを判断することです。

var myVar = [{% for val in myVar %}"{{ val }}"{% if loop.last == false %},{% endif %}{% endfor %}]

2番目の方法は、PHPにエスケープを含むすべてを処理させてから、Twigで生の文字列を出力することです。

$arr = array_map(
    function($value) {
        return '"' . htmlspecialchars($value, ENT_QUOTES, 'UTF-8') . '"';
    },
    $arr
);
$myVar = '[' . implode(',', $arr) . ']';

次に、変数をビューに渡す$myVarと、次のことができます。

{{ myVar|raw }}
于 2020-03-05T06:21:10.490 に答える