Nasıl Symfony 1.2 form alanında bazı HTML etiketleri izin

2 Cevap php

Ben Symfony etrafında oynuyorum ve bir yol blok karşılaştı.

Ben bir clob (bu inanıyorum doktrine özgü) olarak saklanır "içerik" olarak adlandırılan bir alan olan bir model "CmsPage" yarattı. Ben app yarattığı zaman ben set "- önceleme-strateji = on" html kuruluşlar veya bu satırlar boyunca bir şey ile kodlanmış alır bir CmsPage düzenlerken herhangi bir html girerseniz yani. Ben bu alanda html ve hızlı googling çok yardımcı olmadı izin istiyorum. Belki yanlış terimler arıyorum.

Anywho Ben karakter bu alana kaçan ve muhtemelen sadece html etiketleri küçük bir seçimine izin devre dışı bırakmak istiyorum. Symfony bunu yapmanın doğru yolu nedir?

2 Cevap

Dan http://www.librosweb.es/symfony%5F1%5F1%5Fen/capitulo7/output%5Fescaping.html

Every template has access to an $sf_data variable, which is a container object referencing all the escaped variables. [skipped] $sf_data also gives you access to the unescaped, or raw, data. This is useful when a variable stores HTML code meant to be interpreted by the browser, provided that you trust this variable. Call the getRaw() method when you need to output the raw data.

echo $sf_data->getRaw('test'); => alert(document.cookie)You will have to access raw data each time you need variables containing HTML to be really interpreted as HTML. You can now understand why the default layout uses $sf_data->getRaw('sf_content') to include the template, rather than a simpler $sf_content, which breaks when output escaping is activated.

Sen http://htmlpurifier.org/ Bu sizin ihtiyaçlarınız için mükemmel bir araçtır kullanabilirsiniz.

İşte htmlpurifier için küçük bir yapılandırma. TinyMCE editör ile bu kurallar mükemmel bir maç.

$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);

Şimdi html etiketleri ile databse veri ekleyebilir ve sizin verilerinizi kaçmak gerekmez, çünkü, htmlpurifier temiz pis, tehlikeli sizin için veri, ve sadece izin verilen etiketleri ve özelliklerini kabul eder.

Umarım işe yarar.