2010-03-28 3 views
2

Я пытаюсь использовать следующий код, и он по-прежнему удаляет все теги. Я делаю что-то неправильно? Я использую новейшую v1.10Zend_Filter_StripTags игнорирование допустимых тегов и атрибутов

$allowed_tags = array('img', 'object', 'param', 'embed', 'a', 'href', 'p', 'br', 'em', 'strong', 'li', 'ol', 'span'); 
$allowed_attributes = array('style', 'src', 'alt', 'href', 'width', 'height', 'value', 'name', 'type', 'embed', 'quality', 'pluginspage'); 
Zend_Loader::loadClass('Zend_Filter_StripTags'); 
$html_filter = new Zend_Filter_StripTags($allowed_tags, $allowed_attributes); 

$post = $html_filter->filter($this->_request->getPost('post')); 

Для тестового примера я использую ту же строку, это то, что происходит в

<p><span style="background-color: #333399; color: #ff9900; text-decoration: underline;"><em><strong>This is a test</strong></em></span></p> 

<p><span style="background-color: #333399; color: #ff9900;"><strong><em><sub><span style="background-color: #ffffff;"><span style="color: #000000;">asdf</span></span></sub></em></strong></span></p> 

<p><span style="background-color: #333399; color: #ff9900;"><strong><em><span style="background-color: #ffffff;"><span style="color: #000000;"><sup>asdf</sup></span></span></em></strong></span></p> 

<p><span style="background-color: #333399; color: #ff9900;"><strong><em><span style="background-color: #ffffff;"><span style="color: #000000;"><img title="Cool" src="../../../public/scripts/tinymce/plugins/emotions/img/smiley-cool.gif" border="0" alt="Cool" />asdf</span></span></em></strong></span></p> 

<ul> 

<li><span style="background-color: #333399; color: #ff9900;"><strong><em><span style="background-color: #ffffff;"><span style="color: #000000;">sadf</span></span></em></strong></span></li> 

</ul> 

<ol> 

<li><span style="background-color: #333399; color: #ff9900;"><strong><em><span style="background-color: #ffffff;"><span style="color: #000000;">asdf</span></span></em></strong></span></li> 

</ol> 

Это то, что выходит

это тест

ASDF

ASDF

ASDF

SADF

ASDF


В качестве альтернативы, возможно, есть что-то еще не так, как я просто попытался это:

$post = strip_tags($this->_request->getPost('elm1'), '<img><object><param><embed><a><href><p><br><em><strong><li><ol><span>'); 

И раздели все так же. Возможно, в PHP есть настройка, которую мне не хватает?

+0

Тестовая строка кажется странной, но я тестирую редактор WYSIWIG, поэтому я использовал кучу опций и схватил html для использования в качестве теста. – Jhorra

ответ

2

Согласно API Doc for the StripTag Filter, конструктор подписи

void __construct ([string|array|Zend_Config $options = null]) 

Так он должен работать с этим (обновлено):

$html_filter = new Zend_Filter_StripTags(array(
    'allowTags' => $allowed_tags, 
    'allowAttribs' => $allowed_attributes 
)); 

В более ранних версиях Zend Framework (1.8.4) у Вас сделать

$html_filter = new Zend_Filter_StripTags($allowed_tags, $allowed_attributes); 

Все версии должны поддерживать:

$html_filter = new Zend_Filter_StripTags; 
$html_filter->setAttributesAllowed($allowed_attributes); 
$html_filter->setTagsAllowed($allowed_tags); 

Internally, StripTags works with str_replace and preg_replace. Поэтому, даже если кто-то добавил strip_tags() в список запрещенных функций в php.ini, фильтр должен работать.

Я пробовал с вашим примером кода, и это сработало.

+0

Я уже пробовал свой второй путь, я дам первый выстрел. – Jhorra

+0

Ни один из них не работает для меня. – Jhorra

+0

@Jhorra Можете ли вы уточнить, что происходит, когда вы это делаете? Что не работает? Вы уверены, что '$ this -> _ request-> getPost ('post')' является строкой? – Gordon

Смежные вопросы