Должен ли я использовать htmlentities
с strip_tags
?
В настоящее время я использую strip_tags
при добавлении в базу данных и думаю об удалении htmlentities
на выходе; Я хочу избежать ненужной обработки при создании HTML на сервере.
Можно ли использовать только strip_tags
без разрешенных тегов?
Во-первых: используйте метод экранирования только как только он вам понадобится. Т.е. если вы что-то вставляете в базу данных, 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 & b" "<b>foo</b>" --> "<b>foo</b>"
Если вы используете 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>"
это должно получить то, что вы хотите и безопасно!