2012-07-04 2 views
1

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

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

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

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

Edit:

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

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

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

+0

комментарий для тех, кто, возможно, оказались в моей ситуации. Если вы удаляете теги HTML, которые генерируются языком шаблонов (например, короткие коды Wordpress), убедитесь, что шаблоны были отображены первыми. – Michael

ответ

3

one предмет это 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/>'; 
+3

Это не совсем так. htmlentities не будут конвертировать объекты в HTML, но наоборот. HTML для сущностей. Я считаю, что функция, которую вы собираетесь использовать, - html_entity_decode() – WooDzu

0

strip_tags() видит тег как регистронезависимом строки между < и первого пробела или>

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

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

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

+0

Пример: http://codepad.org/kvVNf2VY –

+1

Да, поэтому я сказал (без пробелов), потому что я не мог понять, как включить его в мой вопрос как целое слово: S жаль путаницы. –

+0

Исправлено с альтернативным объяснением в результате вашего разъяснения. –