Вы должны использовать только htmlspecialchars
в выводе HTML, и нигде больше.
<input name="var" value="<?php echo htmlspecialchars($var)?>">
Если бы $var
содержал, скажем, амперсанд, то в HTML он вывел бы закодированное значение:
<input name="var" value="this&that">
Однако пользователь будет видеть только this&that
в своем поле ввода, и после отправки $_GET['var']
будет this&that
, а не закодированной версией.
Что касается PHP, единственное, что вы можете сделать, - это удалить косую черту, если включены магические кавычки:
if (get_magic_quotes_gpc())
$var = stripslashes($_POST['var']);
else
$var = $_POST['var'];
Оттуда вы должны хранить необработанные данные в базе данных, а не HTML-кодированные версии. Чтобы избежать внедрения SQL, используйте mysql_real_escape_string
, если вы используете обычные функции mysql, или вместо этого используйте PDO .