2009-08-24 7 views
0

Ich spiele um mit Symfony zu ermöglichen und habe eine Straßensperre aufgetreten.Wie bestimmte HTML-Tags in einem Formularfeld in Symfony 1.2

habe ich ein Modell „CmsPage“, die ein Feld „Inhalt“ genannt hat, die als clob gespeichert ist (dies ist spezifisch für Lehre glaube ich). Als ich die App erstellt habe, habe ich "--escaping-strategy = on" gesetzt, wenn ich bei der Bearbeitung einer CmsPage, die mit Html-Entities oder etwas Ähnlichem codiert wird, einen beliebigen HTML-Code eingeben würde. Ich würde gerne HTML in diesem Bereich erlauben und ein schnelles googlen hat nicht viel geholfen. Vielleicht suche ich nach den falschen Begriffen.

Anywho Ich mag würde für dieses Feld deaktivieren Charakter zu entkommen und möglicherweise nur eine kleine Auswahl von HTML-Tags ermöglichen. Was ist der richtige Weg, dies in Symfony zu tun?

Antwort

0

Von http://www.librosweb.es/symfony_1_1_en/capitulo7/output_escaping.html

Jede Vorlage Zugang zu einem $ sf_data Variable hat, die ein Containerobjekt ist Referenzierung alle entkam Variablen. [übersprungen] $ sf_data gibt Ihnen auch Zugriff auf die nicht gescannten oder rohen Daten. Dies ist nützlich, wenn eine Variable HTML-Code speichert, der vom Browser interpretiert werden soll, sofern Sie dieser Variablen vertrauen. Rufen Sie die Methode getRaw() auf, wenn Sie die Rohdaten ausgeben müssen.

echo $ sf_data-> getRaw ('test'); => alert (document.cookie) Sie müssen jedes Mal auf Rohdaten zugreifen, wenn Sie Variablen benötigen, die HTML enthalten, um wirklich als HTML interpretiert zu werden. Sie können jetzt verstehen, warum das Standardlayout $ sf_data-> getRaw ('sf_content') verwendet, um die Vorlage einzuschließen, und nicht einen einfacheren $ sf_content, der bei aktivierter Ausgabe-Escaping-Funktion bricht.

+0

Wow, es ist richtig in der endgültigen Anleitung. Danke P – camomileCase

6

können Sie verwenden http://htmlpurifier.org/ Es ist großes Werkzeug für Ihre Bedürfnisse.

Hier ist klein Konfiguration für HTMLPurifier. Diese Regeln passen perfekt zum TinyMce-Editor.

$purifier = new HTMLPurifier(); 
$purfier_config = HTMLPurifier_Config::createDefault(); 
$purfier_config->set('HTML.DefinitionID', 'User Content Filter'); 
$purfier_config->set('HTML.DefinitionRev', 1); 
// these are allowed html tags, means white list 
$purfier_config->set('HTML.Allowed', 'a,strong,em,p,span,img,li,ul,ol,sup,sub,small,big,code,blockquote,h1,h2,h3,h4,h5'); 
// these are allowed html attributes, coool! 
$purfier_config->set('HTML.AllowedAttributes', 'a.href,a.title,span.style,span.class,span.id,p.style,img.src,img.style,img.alt,img.title,img.width,img.height'); 
// auto link given url string 
$purfier_config->set('AutoFormat.Linkify', true); 
// auto format \r\n lines 
$purfier_config->set('AutoFormat.AutoParagraph', true); 
// clean empty tags 
$purfier_config->set('AutoFormat.RemoveEmpty', true); 
// cache dir, just for symfony of course, you can change to another path 
$purfier_config->set('Cache.SerializerPath', sfConfig::get('sf_cache_dir')); 
// translation type, 
$purfier_config->set('HTML.Doctype', 'XHTML 1.0 Transitional'); 
// allow youtube videos 
$purfier_config->set('Filter.YouTube', true); 
$purfier_config->set('HTML.TidyLevel', 'heavy'); 
// now clean your data 
$clean_nice_html_data = $purifier->purify($user_input_data, $purfier_config); 

Jetzt können Sie Daten zu databse mit HTML-Tags einfügen, und Sie müssen Ihre Daten nicht entkommen, weil HTMLPurifier sauber böse, gefährliche Daten für Sie, und nur Ihre erlaubten Tags und Attribute akzeptieren.

Ich hoffe es hilft.

Verwandte Themen