У меня есть страница профиля, на которой я хочу отображать информацию из базы данных для большинства пользователей, а также форму с текущими данными в качестве значения по умолчанию для пользователей с правами на изменение.
if ($IDprofile == $_SESSION['userID'])
{
echo "<form method='post'>
Surname: <input type='text' required name='surname' maxlength=50
value=".htmlentities($user['Surname'])."><br>
Name: <input type='text' required name='name' maxlength=50
value=".htmlentities($user['Name'])."><br>
Birthdate (format YYYY-MM-DD): <input type='text' required name='BirthDate' value='";
if ($user['BirthDate'] != null)
echo $user['BirthDate'];
else
echo "-";
echo "'><br>
Description: <input type='text' maxlength=255 name='description' value='";
if ($user['Description'] != null)
echo htmlentities($user['Description']);
else
echo "-";
echo "'><br>
<input type='submit' value='OK'></form>";
}
Как видите, я пытался с htmlentities
, который должен превратить апостроф в '
, но это не работает. Другие методы, такие как addslashes
а также addcslashes
тоже не работает
То, что отображается, — это ввод моей формы со значением, которое она должна иметь, до того места, где должен быть апостроф, где он просто заканчивается. addslashes
делает то же самое, с /
до конца.
Больше всего меня озадачивает то, что у меня есть фамилия с апострофом в моей базе данных, и эта отображается очень хорошо.
htmlentities
по умолчанию только кодирует "
двойные кавычки, потому что это наиболее распространенные терминаторы для атрибутов HTML. Если вы хотите, чтобы это закодировать '
одинарные кавычки, вам нужно установить ENT_QUOTES
флаг:
htmlentities($foo, ENT_QUOTES | ENT_HTML401)
(ENT_HTML401
другой флаг по умолчанию; в эти дни вы можете использовать ENT_HTML5
вместо.)
Вы также должны разграничивать свои атрибуты кавычками! В настоящее время ваш результат выглядит как value=James
, что не является неправильным, но вы попадете в неприятности, как только ваши значения содержат пробелы или, ну, кавычки или другие специальные символы.
Пожалуйста, попробуйте вывести свои переменные следующим образом:
htmlspecialchars($user['Surname'], ENT_QUOTES);
Также обязательно отключить магические кавычки в вашей системе, чтобы вы не получили лишних слешей автоматически при публикации новых данных.