Как правильно экранировать html формы ввода значений по умолчанию в php? - PullRequest
61 голосов
/ 06 июня 2011

Учитывая следующие два фрагмента html / php:

<input type="text" name="firstname" value="<?php echo $_POST['firstname']; ?>" />

и

<textarea name="content"><?php echo $_POST['content']; ?></textarea>

какую кодировку символов мне нужно использовать для отражаемых переменных $_POST?Могу ли я использовать любые встроенные функции PHP?Пожалуйста, предположим, что значения $_POST еще не были закодированы.Никаких магических кавычек нет ничего.

Ответы [ 4 ]

92 голосов
/ 06 июня 2011

Используйте htmlspecialchars($_POST['firstname']) и htmlspecialchars($_POST['content']).

Всегда экранируйте строки с htmlspecialchars(), прежде чем показывать их пользователю.

4 голосов
/ 06 июня 2011

htmlspecialchars будет работать в обоих случаях. Посмотрите на различные варианты флагов, чтобы избежать проблем с кавычками в случае input.

1 голос
/ 07 ноября 2018

Учитывая, что это довольно долго, я бы поместил его в функцию

<?PHP
function encodeValue ($s) {
    return htmlentities($s, ENT_COMPAT|ENT_QUOTES,'ISO-8859-1', true); 
}
?>

Это имеет ENT_QUOTES , чтобы обеспечить кодирование одинарных и двойных кавычек, но это также кодировать специальные символы (как в Хосе) вместо вставки пустой строки.

Тогда вы можете сделать:

<input type="text" name="firstname" value="<?= encodeValue($_POST['firstname']) ?>" />

и

<textarea name="content"><?= encodeValue($_POST['content']) ?></textarea>
0 голосов
/ 18 апреля 2019

Я часто использую

<input type="text" name="firstname" value=<?php echo json_encode($_POST['firstname']); ?>/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...