strip_tags и htmlentities

Должен ли я использовать htmlentities с strip_tags ?

В настоящее время я использую strip_tags при добавлении в базу данных и думаю об удалении htmlentities на выходе; Я хочу избежать ненужной обработки при создании HTML на сервере.

Можно ли использовать только strip_tags без разрешенных тегов?

Solutions Collecting From Web of "strip_tags и htmlentities"

Во-первых: используйте метод экранирования только как только он вам понадобится. Т.е. если вы что-то вставляете в базу данных, mysql_real_escape_string ее только для базы данных, то есть примените mysql_real_escape_string (или PDO->quote или любой другой уровень базы данных, который вы используете). Но пока не применяйте экранирование для вывода. Пока нет strip_tags или подобного. Это связано с тем, что вы можете использовать данные, хранящиеся в базе данных, где-то еще, где HTML-экранирование необязательно, но только делает текст уродливым.

Второй: вы не должны использовать strip_tags . Он полностью удаляет теги. Т.е. пользователь не получает тот же результат, что и набрал. Вместо этого используйте htmlspecialchars . Он даст пользователю тот же результат, но сделает его безвредным.

strip_tags удалит все HTML-теги:

 "<b>foo</b><i>bar</i>" --> "foobar" 

htmlentities будут кодировать символы, которые являются специальными символами в HTML

 "a & b" --> "a &amp; b" "<b>foo</b>" --> "&lt;b&gt;foo&lt;/b&gt;" 

Если вы используете htmlentities , то при выводе строки в браузер пользователь должен увидеть текст по мере его ввода, а не как HTML

 echo htmlentities("<b>foo</b>"); 

Визуально результат: <b> foo </ b>

 echo strip_tags("<b>foo</b>"); 

Результаты в: foo

Я бы не использовал htmlentities, так как это позволит вам вставлять строку как есть в базу данных, не подходит для деталей аккаунта или форумов.

Используйте mysql_real_escape_string для вставки в базу данных и strip_tags для воссоздания из базы данных и эхо-сигнала на экран

попробуйте это и увидите различия:

  <?php $d= isset($argv[1]) ? $argv[1] : "empty argv[1]".PHP_EOL; echo strip_tags(htmlentities($d)) . PHP_EOL; echo htmlentities(strip_tags($d)) . PHP_EOL; ?> 

откройте cmd или ваш терминал и введите что-то вроде следующего;

  php your_script.php "<br>foo</br>" 

это должно получить то, что вы хотите и безопасно!