Как избежать апострофа внутри ввода, сделанного с апострофами

У меня есть страница профиля, на которой я хочу отображать информацию из базы данных для большинства пользователей, а также форму с текущими данными в качестве значения по умолчанию для пользователей с правами на изменение.

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, который должен превратить апостроф в &#39;, но это не работает. Другие методы, такие как addslashes а также addcslashes тоже не работает

То, что отображается, — это ввод моей формы со значением, которое она должна иметь, до того места, где должен быть апостроф, где он просто заканчивается. addslashes делает то же самое, с / до конца.

Больше всего меня озадачивает то, что у меня есть фамилия с апострофом в моей базе данных, и эта отображается очень хорошо.

0

Решение

htmlentities по умолчанию только кодирует " двойные кавычки, потому что это наиболее распространенные терминаторы для атрибутов HTML. Если вы хотите, чтобы это закодировать ' одинарные кавычки, вам нужно установить ENT_QUOTES флаг:

htmlentities($foo, ENT_QUOTES | ENT_HTML401)

(ENT_HTML401 другой флаг по умолчанию; в эти дни вы можете использовать ENT_HTML5 вместо.)

Вы также должны разграничивать свои атрибуты кавычками! В настоящее время ваш результат выглядит как value=James, что не является неправильным, но вы попадете в неприятности, как только ваши значения содержат пробелы или, ну, кавычки или другие специальные символы.

4

Другие решения

Пожалуйста, попробуйте вывести свои переменные следующим образом:

htmlspecialchars($user['Surname'], ENT_QUOTES);

Также обязательно отключить магические кавычки в вашей системе, чтобы вы не получили лишних слешей автоматически при публикации новых данных.

1