2015-02-23 2 views
9

Я использую ветку для визуализации представления, и я использую фильтр striptags для удаления тегов html. Однако html специальные символы теперь отображаются как текст, так как весь элемент окружен "". Как я могу либо вырезать специальные символы, либо отображать их, сохраняя при этом функцию striptags?twig striptags и html специальные символы

Пример:

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

или

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

Выход:

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

не работает, но я наконец-то решил. благодаря! –

ответ

2

Арфа, я, наконец, нашел его:

Я использую пользовательский фильтр прут, который только применяет функцию php:

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

Теперь он делает правильно

Мой 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

У меня была такая же проблема, я решил его бют эту функцию ниже, используя 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

Если это может помочь кому-то еще, вот мое решение

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

Вы также можете добавить декоративную фильтр, чтобы удалить пробелы до и после. А потом, вы укоротить или нарезать ваш organization.content

EDIT ноября 2017

Если вы хотите сохранить «\ п» разрыв строки в сочетании с срезанным, вы можете сделать

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

+0

Огромное спасибо за этот ответ: короткий, краткий и именно то, что я искал. – nicolallias

+3

Я все еще получал странные специальные персонажи, поэтому я попробовал еще несколько вещей. Это то, что сработало для меня: '{{organization.content | striptags | raw}}' –

+0

Будьте осторожны с raw, так как это может иметь проблемы с XSS. См. Также https://github.com/twigphp/Twig/issues/2215#issuecomment-258088927 – LarS

1

Я пытался несколько, среди прочего, ответы на эти вопросы:

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

И все еще были странные персонажи в финальной форме. Что помогло мне, ставит raw фильтр на конце всех операций, то есть:

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

Будьте осторожны с сырым, поскольку это может иметь проблемы с XSS. См. Также https: // github.com/twigphp/Twig/issues/2215 # issuecomment-258088927 – LarS

+0

Да, но я сначала использую 'striptags'. Не гарантирует ли он безопасность? –

+1

Я добавил предупреждение для случая, когда некоторые теги могут быть разрешены. 'striptags' без разрешенных тегов будет сохранять save, но с разрешенными тегами' striptags ('') 'not. Внутри он использует функцию php strip_tags, см. Также https://stackoverflow.com/q/3605629/880188. – LarS

3

У меня была аналогичная проблема, это работает для меня:

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

Это сработало и для меня. –