2015-02-23 9 views
9

Ich benutze Zweig, um eine Ansicht zu rendern, und ich verwende den Striptags Filter, um HTML-Tags zu entfernen. HTML-Sonderzeichen werden jedoch jetzt als Text gerendert, da das gesamte Element von "" umgeben ist. Wie kann ich entweder spezielle Zeichen entfernen oder sie rendern, während ich immer noch die Striptags-Funktion verwende?Zweig Striptags und html spezielle Zeichen

Beispiel:

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

oder

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

Ausgang:

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

nicht funktioniert, aber ich es endlich gelöst. Vielen Dank! –

Antwort

2

Arf, fand ich es schließlich:

ich einen benutzerdefinierten Zweig Filter verwende, die gerade wendet eine PHP-Funktion an:

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

Jetzt macht es richtig

Meine PHP-Erweiterung:

<?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

hatte ich das gleiche Problem, ich beschlossen, es byt dieser Funktion unten, strip_tags verwenden.

<?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

Wenn es jemand anderes helfen könnte, hier ist meine Lösung

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

Sie können auch einen Trimm-Filter hinzufügen Leerzeichen zu entfernen, vor und nach. Und dann können Sie Ihre organization.content

EDIT November 2017

gestutzt oder in Scheiben schneiden Wenn Sie den "\ n" Bruchlinien mit einem Abschneide kombiniert halten möchten, können Sie

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

+0

Vielen Dank für diese Antwort: kurz, präzise und genau das, was ich gesucht habe. – nicolallias

+3

Ich bekam immer noch seltsame Sonderzeichen, also probierte ich ein paar andere Dinge aus. Das hat bei mir funktioniert: '{{organisation.content | striptags | rohe}}' ' –

+0

Sei vorsichtig mit roh, da es XSS-Probleme haben kann. Siehe auch https://github.com/twigphp/Twig/issues/2215#issuecomment-258088927 – LarS

1

ich war einige, unter anderem, diese Antworten versuchen:

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

Und immer noch seltsame Charaktere in der endgültigen Form. Was hat mir geholfen, setzt die raw Filter am Ende aller Operationen, das heißt:

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

Sei vorsichtig mit roh, da es XSS-Probleme haben kann. Siehe auch https: // github.com/twigphp/Twig/issues/2215 # issuecomment-258088927 – LarS

+0

Ja, aber ich benutze zuerst '' 'Striptags''. Stellt es nicht sicher, dass es sicher ist? –

+1

Ich habe die Warnung für den Fall hinzugefügt, dass einige Tags noch erlaubt sind. 'Striptags' mit nicht erlaubten Tags würden speichern, aber mit erlaubten Tags' Striptags ('') 'nicht. Intern verwendet es die PHP-Funktion strip_tags, siehe auch https://stackoverflow.com/q/3605629/880188. – LarS

3

ich ein ähnliches Problem hatte, das für mich gearbeitet:

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

Das hat auch für mich funktioniert. –

Verwandte Themen