Ваш HTML экранирует строки (с htmlspecialchars()
или htmlentities()
) перед вставкой в базу данных, что является плохой идеей. Вы можете использовать html_entity_decode()
для восстановления урона, но лучше этого не делать.
Время, когда вы должны экранировать HTML, подходит перед тем, как вы выводите данные в браузер, обычно с выбранными строками из запросов SELECT:
Сделайте Google для XSS.
Не то, чтобы экранирование HTML не имело ничего общего с «добавлением слешей», которое вы должны делать перед вставкой строки в базу данных с помощью mysql_real_escape_string()
. Это сделано для того, чтобы избежать уязвимостей SQL-инъекций.
<?php $row = mysql_fetch_row($result);
echo htmlspecialchars($row['someField']); // good place to escape HTML.
<?php $str = htmlspecialchars($_GET['foo']); // bad place to escape HTML.
$str = mysql_real_escape_string($str); // good place to escape for DB.
$q = 'INSERT INTO .... VALUES (' . $str . ')';
mysql_query($q);