php strip_tags: позволяет? - PullRequest
       25

php strip_tags: позволяет?

9 голосов
/ 25 сентября 2010

Как можно разрешить <br /> в strip_tags () или любым способом, которым я могу обойти это?

<?php
$text = '<p>Test <br />paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p>, <a>, <br />
echo strip_tags($text, '<p><a><br />');
echo "\n";

// Allow <br /> only
echo strip_tags($text, '<br />');
?>

результат:

Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>
Test paragraph. Other text

Спасибо, Лау

Ответы [ 4 ]

17 голосов
/ 25 сентября 2010

Не используете самозакрывающееся имя тега? echo strip_tags($text, '<br>');

Аргумент strip_tags() функции *1004* принимает допустимые теги в виде <tagname> Причина, по которой ваш код не работал, заключалась в том, что вы использовали <br /> вместо <br>.

6 голосов
/ 25 сентября 2010

strip_tags не предназначен в качестве меры безопасности, и использование его с allowable_tags определенно небезопасно, так как пропускает обработчик событий и другие вредные атрибуты.

Если вы хотите разрешить ввод данных пользователем с помощью нескольких элементов и атрибутов из белого списка, вам нужно использовать библиотеку для очистки HTML с подходящим парсером HTML. См. Например HTML-очиститель .

Обычно для комментариев пользователей лучше вообще не предоставлять пользователю контроль над разметкой HTML, а вместо этого принимать необработанный текст, экранировать его при выводе HTML и делать замены для создания разметки из текста (например: \n -> <br>, \n\n -> </p><p>, обнаружение канала).

2 голосов
/ 22 октября 2012

Пробелы также не допускаются в тегах: http://php.net/manual/en/function.strip-tags.php (см. 2-ую заметку)

1 голос
/ 25 сентября 2010

Да, вы можете смешать один или несколько тегов для одновременного чередования.

string strip_tags ( string $str [, string $allowable_tags ] )

проверить документацию

если вы хотите удалить новую строку, а решение будет перед удалением, вы можете использовать nl2br

так

echo strip_tags(nl2br($text), '<br>');
...