php strip_tags не удаляет div (и другие)

Я пытаюсь проверить форму комментария с помощью AJAX/PHP, почти готово, за исключением того, что функция strip_tags в php, похоже, не удаляет все элементы. Вот что у меня есть:

$msg = $_POST['message'];
$msg = strip_tags( $msg );

Эта функция только удаляет закрывающие теги. Например. <div>, введенное в окно сообщения, не удаляется, а </div> удаляется. Я хочу буквально удалить каждый элемент html в сообщении. Как мне этого добиться?

Спасибо, Дэн.

Редактировать:

Я чувствую себя полным идиотом!

У меня есть функция проверки, отдельная от моей функции показа комментариев, и я только что понял свою ошибку. Я никогда не запускал strip_tags в отображаемом сообщении!

В любом случае, спасибо за попытку помочь!


person Obi-Dan    schedule 04.07.2012    source источник
comment
Комментарий для тех, кто, возможно, оказался в моей ситуации. Если вы удаляете теги HTML, сгенерированные языком шаблонов (например, шорткоды Wordpress), убедитесь, что шаблоны отобразились первыми.   -  person Michael    schedule 16.10.2012


Ответы (2)


одна вещь, с которой strip_tags() может потерпеть неудачу, это htmlentities().

например, <div> будет отображаться как %3Cdiv%3E.

Попробуй это. htmlentities преобразует код, например. %3C в HTML, например. <

$msg = strip_tags(htmlentities($msg));

вы должны увидеть, что вы пытаетесь отладить, сравнив их:

echo $msg . '<br/>';
echo strip_tags($msg) . '<br/>';
echo htmlentities($msg) . '<br/>';
echo strip_tags(htmlentities($msg)) . '<br/>';
person jay    schedule 04.07.2012
comment
Это не совсем правда. htmlentities не будет преобразовывать объекты в HTML, а наоборот, например. HTML для сущностей. Я считаю, что функция, которую вы собираетесь использовать, была html_entity_decode(). - person WooDzu; 26.08.2013

strip_tags() рассматривает тег как строку без учета регистра между ‹ и первый пробел или >

Таким образом, strip_tags('< / div >') или strip_tags('< div >') не дадут никаких изменений, если у вас есть пробелы.

Вы можете опубликовать пример строки, которую вы пытаетесь очистить.

Вам также следует попробовать вывести $msg напрямую и просмотреть испускаемый источник. Поскольку вы отправляете данные (в зависимости от того, как вы отправляете данные от клиента), вы можете обнаружить, что на самом деле пытаетесь удалить %3Cdiv%3E%3C%2Fdiv%3E (что допустимо) вместо ожидаемого <div></div>.

person Bob Davies    schedule 04.07.2012
comment
Да, именно поэтому я сказал (без пробелов), потому что я не мог понять, как включить его в свой вопрос как целое слово: S, извините за путаницу. - person Obi-Dan; 04.07.2012
comment
Пересмотрено с альтернативным объяснением в результате вашего разъяснения. - person Bob Davies; 04.07.2012