Ответ 1
Используйте htmlspecialchars($_POST['firstname'])
и htmlspecialchars($_POST['content'])
.
Всегда отключайте строки с htmlspecialchars()
, прежде чем показывать их пользователю.
Учитывая следующие два фрагмента HTML/PHP:
<input type="text" name="firstname" value="<?php echo $_POST['firstname']; ?>" />
а также
<textarea name="content"><?php echo $_POST['content']; ?></textarea>
какую кодировку символов мне нужно использовать для отраженных переменных $_POST
? Могу ли я использовать любые встроенные функции PHP? Пожалуйста, предположим, что значения $_POST
еще не были закодированы. Никаких волшебных кавычек нет ничего.
Используйте htmlspecialchars($_POST['firstname'])
и htmlspecialchars($_POST['content'])
.
Всегда отключайте строки с htmlspecialchars()
, прежде чем показывать их пользователю.
Однако htmlspecialchars() не поможет вам с value='single quotes'
Вот что происходит:
value='We're not using this in our "code"...'
Все, что вы видите, это We
htmlspecialchars будет работать в обоих случаях. Посмотрите на различные параметры флага, чтобы избежать кавычек, являющихся проблемой в случае input
.
Учитывая, что это довольно долго, я бы поместил это в функцию
<?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>
Я часто использую
<input type="text" name="firstname" value=<?php echo json_encode($_POST['firstname']); ?>/>