Я пытаюсь создать страницу редактирования для редактирования заголовка.
Этот заголовок будет отображаться как в теге «h3», так и в поле ввода.
Когда пользователь доволен заголовком, он отправляет его в mysql, где он сохраняется.
Страница обновится, и он сможет увидеть свой новый заголовок в теге «h3» и в поле ввода.
Проблема в том, что когда в заголовке участвуют кавычки, я не получаю тот же результат в теге «h3» и в поле ввода.
Вот как я получаю переменную, чтобы отправить ее в базу данных:
$title_set = $_POST['title'];
И вот как я отображаю переменную как в теге, так и в поле ввода:
$title_get = $result['denomination'];
С этим вот дисплей для заголовка: L’appel de la «forêt»
$title_set = $_POST['title'];
$title_get = $result['denomination'];
<h3> -> No output
Input -> No output
Вариация 1:
$title_set = addslashes($_POST['title']);
$title_get = $result['denomination'];
<h3> -> L'appel de la "forêt"Input -> L'appel de la
Вариация 2:
$title_set = addslashes($_POST['title']);
$title_get = stripslashes($result['denomination']);
<h3> -> L'appel de la "forêt"Input -> L'appel de la
Вариация 3:
$title_set = mysql_real_escape_string ($_POST['title']);
$title_get = $result['denomination'];
<h3> -> L'appel de la "forêt"Input -> L'appel de la
Очевидно, есть различия в способе, которым тег заголовка и поле ввода могут отображать динамические данные с кавычками, поля ввода являются более строгими.
И что же мне делать?
Мои страницы, скрипты и база данных закодированы в UTF_8
Перед вставкой данных в базу данных используйте экранирующую функцию, например mysql_real_escape_string (). Или, что еще лучше, переключитесь на PDO, чтобы вы могли использовать подготовленные запросы и передавать данные в качестве параметра. Это защищает от внедрения SQL. Увидеть Как я могу предотвратить SQL-инъекцию в PHP?
Прежде чем выводить в HTML динамический контент, извлеченный из базы данных, закодируйте его с помощью htmlspecialchars (). Это защищает от межсайтового скриптинга (XSS). Увидеть Как предотвратить XSS с HTML / PHP?
Дальнейшее чтение: https://www.owasp.org/index.php/OWASP_Top_Ten_Cheat_Sheet больше на инъекции и XSS рисках и средствах защиты.
Вам нужно использовать mysql_real_escape_string()
при вставке значения в запрос MySQL. В противном случае кавычки во входных данных приведут к ошибкам синтаксиса SQL. Было бы еще лучше, если бы вы конвертировали в MySQLI или PDO и использовали параметры запроса вместо конкатенации строк.
Вы должны использовать htmlentities()
при получении данных и отображении их на веб-странице. Это даст правильную кодировку HTML всех специальных символов.