Ich verwende twig 1.12.2. Mein Code generiert einige Elemente aus Code-Behind, wenn diese mit der neuesten Version von twig= gerendert werden, erhalten sie HTML- codiert
{% 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 %}
Dies wird dies ausgeben
<tr class="tr_even">
<td><img src="../templates/images/sharepoint/Document.gif" border="0" alt=""/></td>
<td><a href='?download=/ddd.png'>ddd.png</a></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><a href='?download=/asdasd.png'>asdasd.png</a></td>
<td>2013-03-03 20:01:52</td>
<td>66.04 KB</td>
<td>png</td>
</tr>
Beim Debuggen und Anzeigen der Daten, bevor sie an twig gesendet werden, wird kein Escape-Befehl ausgeführt. Ich habe keine Alternative zu {{item.Link}} gefunden, um die Daten so wie sie sind zu rendern .
Vielen Dank
Sie können den Filter raw
verwenden, um twig raw html zu rendern
http://twig.sensiolabs.org/doc/filters/raw.html
{% autoescape %}
{{ var|raw }} {# var won't be escaped #}
{% endautoescape %}
Seien Sie vorsichtig bei der Verwendung von | raw. Wenn Sie sagen, dass die Daten sicher sind, bedeutet dies, dass Sie ihnen zu 100% vertrauen.
Persönlich würde ich vorschlagen, einen benutzerdefinierten twig Filter zu verwenden:
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);
}
}
Fügen Sie Ihrer services.yml Folgendes hinzu (oder übersetzen Sie alternativ in XML).
services:
ha.twig.custom_extension:
class: HA\SiteBundle\Twig\CustomExtension
tags:
- { name: twig.extension }
Oder http://twig.sensiolabs.org/doc/filters/raw.html
{% autoescape false %}
{{ your_item }}{# your_item won't be escaped #}
{% endautoescape %}
Wenn Sie Drupal 8 verwenden und keiner von raw
oder autoscape
funktioniert, kann dies an der Variablen liegen, die Sie drucken möchten, wenn es sich um ein Rendering handelt Array mit einer Vorlage, die eine sichere Ausgabe enthält (z. B. ein hl2br
Filter).
In diesem Fall müssten Sie auf den Wert über das Render-Array zugreifen und ihn filtern, zum Beispiel:
{% autoescape false %}
{{ item.content['#context']['value'] }}
{% endautoescape %}