9

コントローラーからビューにデータを送信する Symfony 2 アプリケーションを構築しています。

コントローラ

$user = array(
    'configuration' => array(
        'levels' => array(
            'warning' => 0.05,
            'danger'  => 0.10,
        ),
    ),
);

return $this->render(
    'MyWebsiteBundle:Core:searchResults.html.twig',
    array(
        'userJSON'  => json_encode($user)
    )
);

意見

<script language="javascript">
    user = $.parseJSON("{{ userJSON }}");
</script>

結果

結果devは次のようになり、期待どおりに動作します。

user = $.parseJSON("\x7B\x22configuration\x22\x3A\x7B\x22levels\x22\x3A\x7B\x22warning\x22\x3A0.05,\x22danger\x22\x3A0.1\x7D\x7D\x7D");

一方、prod結果は別の方法でエンコードされるため、コンソールにエラーが表示されます。

user = $.parseJSON("{&quot;configuration&quot;:{&quot;levels&quot;:{&quot;warning&quot;:0.05,&quot;danger&quot;:0.1}}}");

コンソール エラー: Uncaught SyntaxError: Unexpected token &

この違いを生み出すものは何ですか?

4

2 に答える 2

19

編集:以下の@Lulhumのソリューションも確認してください。良い場合は賛成票を投じて、正解として選択します。

「問題」は、Twig の自動エスケープ変数でした。Twig のrawフィルターを使用して、次のように自動エスケープをスキップしました。

<script language="javascript">
    user = $.parseJSON('{{ userJSON | raw }}');
</script>

これで印刷されます:

user = $.parseJSON('{"configuration":{"levels":{"warning":0.05,"danger":0.1}}}');

リンク: Symfony 2 Docs - 出力エスケープ

于 2013-10-25T21:32:13.880 に答える