Как разрешить определенные теги HTML в поле формы в Symfony 1.2 - PullRequest
0 голосов
/ 24 августа 2009

Я играю с Symfony и столкнулся с дорожным блоком.

Я создал модель "CmsPage", в которой есть поле с именем "content", которое хранится в виде сгустка (я думаю, это специфично для доктрины). Когда я создал приложение, я установил «--escaping-Strategy = on», поэтому, если я ввожу любой html при редактировании CmsPage, который кодируется с помощью html-сущностей или чего-то подобного. Я хотел бы разрешить HTML в этой области, и быстрый поиск в Google не очень помог. Возможно я ищу неправильные термины.

В любом случае, я хотел бы отключить экранирование символов для этого поля и, возможно, разрешить только небольшой выбор HTML-тегов. Как правильно сделать это в Symfony?

Ответы [ 2 ]

6 голосов
/ 24 августа 2009

Вы можете использовать http://htmlpurifier.org/ Это отличный инструмент для ваших нужд.

Вот небольшая конфигурация для htmlpurifier. Эти правила идеально подходят для редактора TinyMce.

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

Теперь вы можете вставлять данные в базу данных с помощью тегов html, и вам не нужно экранировать свои данные, потому что htmlpurifier очищает от вас неприятные и опасные данные и принимает только разрешенные вами теги и атрибуты.

Надеюсь, это поможет.

0 голосов
/ 24 августа 2009

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

Каждый шаблон имеет доступ к переменной $ sf_data, которая является контейнерным объектом, ссылающимся на все экранированные переменные. [Пропущено] $ sf_data также дает вам доступ к неэкранированным или необработанным данным. Это полезно, когда переменная хранит HTML-код, предназначенный для интерпретации браузером, при условии, что вы доверяете этой переменной. Вызовите метод getRaw (), когда вам нужно вывести необработанные данные.

echo $ sf_data-> getRaw ('test'); => alert (document.cookie) Вам придется обращаться к необработанным данным каждый раз, когда вам нужны переменные, содержащие HTML, которые действительно интерпретируются как HTML. Теперь вы можете понять, почему макет по умолчанию использует $ sf_data-> getRaw ('sf_content') для включения шаблона, а не простой $ sf_content, который прерывается при активации экранирования вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...