Как безопасно вывести текст пользователя
Короткий ответ
Пропускайте через htmlspecialchars() всё, что выводите в HTML:
<?php
$comment = '<script>alert(1)</script>';
echo htmlspecialchars($comment);Результат:
<script>alert(1)</script>С переносами строк
Сначала экранирование, потом nl2br():
<?php
$comment = "First line\n<b>Second</b>";
echo nl2br(htmlspecialchars($comment));Результат:
First line<br />
<b>Second</b>Значение атрибута
Кавычки в значении тоже экранируются — поле формы не «сломается»:
<?php
$name = 'Tom "The Cat"';
echo '<input value="' . htmlspecialchars($name) . '">';Результат:
<input value="Tom "The Cat"">Функции из этого ответа
- htmlspecialchars — Заменяет специальные символы HTML на безопасные обозначения.
- strip_tags — Удаляет из строки HTML-теги.
- nl2br — Вставляет тег br перед каждым переводом строки.