2015-02-23 61 views
9

Używam gałązki do renderowania widoku i używam filtra striptags, aby usunąć znaczniki html. Jednak znaki specjalne html są teraz renderowane jako tekst, ponieważ cały element jest otoczony przez "". Jak mogę usunąć specjalne znaki lub renderować je, nadal korzystając z funkcji striptagów?twig striptags i html specjalne znaki

Przykład:

{{ organization.content|striptags(" >")|truncate(200, '...') }} 

lub

{{ organization.content|striptags|truncate(200, '...') }} 

wyjściowa:

"QUI SOMMES NOUS ? > NOS LOCAUXNOS LOCAUXDepuis 1995, Ce lieu chargé d’histoire et de tradition s’inscrit dans les valeurs" 
+0

nie działa, ale w końcu rozwiązany. dzięki! –

Odpowiedz

2

Arf, w końcu znalazłem go:

Używam niestandardowy filtr gałązka, że ​​właśnie stosuje funkcję php:

<span>{{ organization.shortDescription ?: php('html_entity_decode',organization.content|striptags|truncate(200, '...')) }}</span> 

Teraz renderuje poprawnie

Moje rozszerzenie php:

<?php 

namespace AppBundle\Extension; 

class phpExtension extends \Twig_Extension 
{ 

    public function getFunctions() 
    { 
     return array(
      new \Twig_SimpleFunction('php', array($this, 'getPhp')), 
     ); 
    } 

    public function getPhp($function, $variable) 
    { 
     return $function($variable); 
    } 

    public function getName() 
    { 
     return 'php_extension'; 
    } 
} 
0

miałem ten sam problem, postanowiłem go byt tej funkcji poniżej, używając strip_tags.

<?php 

namespace AppBundle\Extension; 

class filterHtmlExtension extends \Twig_Extension 
{ 

    public function getFunctions() 
    { 
     return array(
      new \Twig_SimpleFunction('stripHtmlTags', array($this, 'stripHtmlTags')), 
     ); 
    } 


    public function stripHtmlTags($value) 
    { 

     $value_displayed = strip_tags($value); 


     return $value_displayed ; 
    } 

    public function getName() 
    { 
     return 'filter_html_extension'; 
    } 
} 
22

Jeśli to może pomóc ktoś inny, tu jest moje rozwiązanie

{{ organization.content|striptags|convert_encoding('UTF-8', 'HTML-ENTITIES') }} 

Można również dodać trymowania filtr do usuwania spacji przed i po. A potem, to obciąć lub pokroić Twój organization.content

EDIT listopada 2017

Jeśli chcesz zachować "\ n" złamać linie połączone ze skróconej, można zrobić

{{ organization.content|striptags|truncate(140, true, '...')|raw|nl2br }}

+0

Wielkie dzięki za odpowiedź: krótką, zwięzłą i dokładnie to, co szukałem. – nicolallias

+3

Ciągle otrzymywałem jakieś dziwne znaki specjalne, więc spróbowałem kilku innych rzeczy. To działało dla mnie: '{{organization.content | striptags | raw}}' –

+0

Uważaj na surowe, ponieważ może mieć problemy z XSS. Zobacz także https://github.com/twigphp/Twig/issues/2215#issuecomment-258088927 – LarS

1

starałem niektóre z, między innymi, następujące odpowiedzi:

{{ organization.content|striptags|truncate(200, true) }} 
{{ organization.content|raw|striptags|truncate(200, true) }} 
{{ organization.content|striptags|raw|truncate(200, true) }} 
etc. 

I wciąż mam dziwne postacie w ostatecznej formie. Co pomogło mi, jest umieszczenie filtra raw na końcu wszystkich operacji, tj:

{{ organization.content|striptags|truncate(200, '...')|raw }} 
+0

Uważaj na surowe, ponieważ może mieć problemy z XSS. Zobacz także https: // github.com/twigphp/Twig/issues/2215 # issuecomment-258088927 – LarS

+0

Tak, ale najpierw używam 'striptagów'. Czy nie zapewnia, że ​​będzie bezpieczny? –

+1

Dodałem ostrzeżenie dla przypadku, w którym niektóre znaczniki mogą nadal być dozwolone. 'striptags' bez dozwolonych znaczników będzie zapisywać, ale z dozwolonymi znacznikami' striptags ('') 'nie. Wewnętrznie używa funkcji php strip_tags, zobacz także https://stackoverflow.com/q/3605629/880188. – LarS

3

Miałem podobny problem, to pracował dla mnie:

{{ variable |convert_encoding('UTF-8', 'HTML-ENTITIES') | raw }} 
+0

To również zadziałało. –