J'utilise twig 1.12.2. Mon code génère des éléments à partir de code-behind, lors du rendu avec la dernière version de twig ils obtiennent html- encodé
{% 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 %}
Cela produira ce
<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>
Quand je débogue et regarde les données avant qu'elles ne soient envoyées à twig elles ne sont pas échappées. Je n'ai trouvé aucune alternative à {{item.Link}} pour rendre les données telles quelles) .
Merci
Vous pouvez utiliser le filtre raw
pour créer twig render raw html
http://twig.sensiolabs.org/doc/filters/raw.html
{% autoescape %}
{{ var|raw }} {# var won't be escaped #}
{% endautoescape %}
Vous devez être prudent lorsque vous utilisez | raw. Dire que les données sont sécurisées signifie que vous leur faites confiance à 100%.
Personnellement, je suggère d'utiliser un filtre personnalisé 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);
}
}
Ajoutez ce qui suit à votre services.yml (ou bien traduisez-le en xml).
services:
ha.twig.custom_extension:
class: HA\SiteBundle\Twig\CustomExtension
tags:
- { name: twig.extension }
Ou http://twig.sensiolabs.org/doc/filters/raw.html
{% autoescape false %}
{{ your_item }}{# your_item won't be escaped #}
{% endautoescape %}
Si vous utilisez Drupal 8 et aucun des travaux raw
ou autoscape
, cela peut se produire en raison de la variable que vous essayez d'imprimer s'il s'agit d'un rendu tableau avec un modèle contenant une sortie sûre (par exemple, un hl2br
filtre).
Dans ce cas, vous devrez accéder à la valeur via le tableau de rendu et la filtrer, par exemple:
{% autoescape false %}
{{ item.content['#context']['value'] }}
{% endautoescape %}