Ich war zufällig gerade dieses Problem haben, aber da strip_tags
nicht genug Werte im Attribute-Tag zu schützen, werde ich meine Antwort einreichen.
Ich verwende HTML Purifier, um alle unerwünschten HTML-Elemente und Attribute zu entfernen. Öffnen Sie eine Befehlskonsole und führen Sie den folgenden Befehl aus, um sie zu installieren.
$ composer require ezyang/htmlpurifier "^4.6"
Dann können Sie Ihre eigenen Zweig Erweiterung erstellen:
namespace AcmeBundle\Twig;
class HTMLPurifierExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('html_purifier', array($this, 'purify'), array('is_safe' => array('html'))),
);
}
public function purify($text)
{
$elements = array(
'p',
'br',
'small',
'strong', 'b',
'em', 'i',
'strike',
'sub', 'sup',
'ins', 'del',
'ol', 'ul', 'li',
'h1', 'h2', 'h3',
'dl', 'dd', 'dt',
'pre', 'code', 'samp', 'kbd',
'q', 'blockquote', 'abbr', 'cite',
'table', 'thead', 'tbody', 'th', 'tr', 'td',
'a[href|target|rel|id]',
'img[src|title|alt|width|height|style]'
);
$config = \HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', implode(',', $elements));
$purifier = new \HTMLPurifier($config);
return $purifier->purify($text);
}
public function getName()
{
return 'html_purifier';
}
}
öffnen services.yml
und registrieren die Erweiterung als Dienstleistung:
services:
acme.html_purifier_extension:
class: AcmeBundle\Twig\HTMLPurifierExtension
public: false
tags:
- { name: twig.extension }
Jetzt können Sie es mit
{{ post.content|markdown|html_purifier }}
Also zur Bestätigung spezifisch Verbündeter, '{{post.content | escape ('html') | markdown}}' funktioniert nicht? EDIT: Ah, Sie wollen bestimmte HTML durch – sjagr
Nein, weil es das '&' und meine Ausgabe ist '<script> alert (" ") ' –