Я играю с Symfony и столкнулся с дорожным блоком.
Я создал модель «CmsPage», в которой есть поле под названием «контент», которое хранится как clob (это характерно для доктрины, я считаю). Когда я создал приложение, я устанавливал «–escaping-strategy = on», поэтому, если я вхожу в любой html при редактировании CmsPage, который получает кодировку с html-сущностями или что-то в этом направлении. Я хотел бы разрешить html в этой области, и быстрый поиск в Google не очень помог. Возможно, я ищу неправильные условия.
Anywho Я хотел бы отключить экранирование символов для этого поля и, возможно, разрешить только небольшой выбор тегов html. Каков правильный способ сделать это в Symfony?
С http://www.librosweb.es/symfony_1_1_en/capitulo7/output_escaping.html
Каждый шаблон имеет доступ к переменной $ sf_data, которая представляет собой объект-контейнер, ссылающийся на все экранированные переменные. [skipped] $ sf_data также дает вам доступ к необработанным или необработанным данным. Это полезно, когда переменная хранит HTML-код, предназначенный для интерпретации браузером, при условии, что вы доверяете этой переменной. Вызовите метод getRaw (), когда вам нужно вывести необработанные данные.
echo $ sf_data-> getRaw ('test'); => alert (document.cookie) Вам придется обращаться к необработанным данным каждый раз, когда вам нужны переменные, содержащие HTML, которые действительно интерпретируются как HTML. Теперь вы можете понять, почему макет по умолчанию использует $ sf_data-> getRaw ('sf_content') для включения шаблона, а не более простой $ sf_content, который прерывается при активации вывода.
Вы можете использовать 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 очищает отвратительные опасные данные для вас и принимает только ваши разрешенные теги и атрибуты.
Я надеюсь, что это помогает.