31

小枝1.12.2を使用しています。私のコードは、コードビハインドからいくつかの要素を生成します。これらを最新バージョンの小枝でレンダリングすると、htmlでエンコードされます。

{% for item in files_folders %}
<tr class="{{ cycle(['tr_odd', 'tr_even'], loop.index) }}">
    <td><img src="../templates/images/sharepoint/{{ item.ContentType }}.gif" border="0" alt=""/></td>
    <td>{{ item.Link }}</td>
    <td>{{ item.Modified }}</td>
    <td>{{ item.FileSize }}</td>
    <td>{{ item.FileType }}</td>
</tr>
{% endfor %}

これはこれを出力します

<tr class="tr_even">
    <td><img src="../templates/images/sharepoint/Document.gif" border="0" alt=""/></td>
    <td>&lt;a href=&#039;?download=/ddd.png&#039;&gt;ddd.png&lt;/a&gt;</td>
    <td>2013-03-04 17:47:38</td>
    <td>64.8 KB</td>
    <td>png</td>
</tr>
<tr class="tr_odd">
    <td><img src="../templates/images/sharepoint/Document.gif" border="0" alt=""/></td>
    <td>&lt;a href=&#039;?download=/asdasd.png&#039;&gt;asdasd.png&lt;/a&gt;</td>
    <td>2013-03-03 20:01:52</td>
    <td>66.04 KB</td>
    <td>png</td>
</tr>

小枝に送信される前にデータをデバッグして確認すると、エスケープされません。データをそのままレンダリングするための{{item.Link}}に代わるものは見つかりませんでした。

ありがとう

4

4 に答える 4

58

フィルターを使用しrawて、小枝に生のhtmlをレンダリングさせることができます

http://twig.sensiolabs.org/doc/filters/raw.html

{% autoescape %}
    {{ var|raw }} {# var won't be escaped #}
{% endautoescape %}
于 2013-03-16T19:22:48.130 に答える
18

|raw の使用には注意が必要です。データが安全であるということは、それを 100% 信頼していることを意味します。

個人的には、カスタム twig フィルターを使用することをお勧めします。

class CustomExtension extends \Twig_Extension 
{
    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('unescape', array($this, 'unescape')),
        );
    }

    public function unescape($value)
    {
        return html_entity_decode($value);
    }
}

以下を services.yml に追加します (または、xml に変換します)。

 services:
     ha.twig.custom_extension:
     class: HA\SiteBundle\Twig\CustomExtension
     tags:
         - { name: twig.extension }
于 2014-07-22T15:16:03.417 に答える
5

Drupal 8 を使用していて、rawまたはautoscapeが機能しない場合、印刷しようとしている変数が、安全な出力 (hl2brフィルターなど) を保持するテンプレートを含むレンダー配列である場合に、これが発生する可能性があります。

その場合、レンダー配列を介して値にアクセスし、それをフィルタリングする必要があります。たとえば、次のようになります。

{% autoescape false %}
  {{ item.content['#context']['value'] }}
{% endautoescape %}
于 2019-08-05T23:00:13.003 に答える