У меня есть веб-сайт, который работает на PHP и базы данных MySQL. Мне было интересно, как лучше всего обрабатывать ввод данных пользователем в отношении кодирования HTML (я хорошо знаю, что я должен сохранять полученные данные и декодировать их в выходных данных: это то, что я делаю) и, в частности, этот цикл:
<input value="però">
и когда пользователь отправит его, сервер получит però
вместо però
,Теперь мой вопрос: должен ли сервер декодировать все полученные входные данные так, чтобы però
раскодируется в оригинал però
?
Я сомневаюсь, что это будет означать, что если пользователь вводит è
в качестве его имени пользователя он будет зарегистрирован как è
и не так, как он на самом деле хотел …
Я знаю, что это не такая большая проблема (не знаю многих пользователей, которые хотели бы использовать специальные символы HTML, кодирующие литералы в своих именах пользователей …), но это озадачило меня, и я не смог найти полностью удовлетворительное решение.
Если я неправильно понял то, что вы спрашиваете, у вас, похоже, сложилось неверное представление о том, как выводить кодированные строки HTML в текстовые вводы. Вот основной пример того, что произойдет. Допустим, у вас есть пользователь, который хочет быть названным PB&J
, Конечно, это странно, но не каждый может выбрать красивое, не странное имя пользователя, такое как «Bonvi» или «Don’t Panic».
Таким образом, вы сохраните это в своей базе данных как есть.
Позже, когда вы используете его в другой форме, вы избегаете его для вывода.
<input type="text" name="username" value="<?= htmlspecialchars($username) ?>">
На вашей странице источник, вот увидишь
<input type="text" name="username" value="PB&amp;J">
с амперсандом, преобразованным в сущность HTML. (Это то, что вы хотите, в случае, если они действительно хотели быть названы bob"><script>alert("però!")</script><p class="ha
или что-то хуже.)
Но значение, отображаемое в текстовом поле, будет PB&J
и когда пользователь отправляет форму, значение в $_POST['username']
будет PB&J
, не PB&amp;J
, Он не будет изменен на закодированное значение.
(Я использовал htmlspecialchars
в этом примере, но то же самое применимо к вашему примеру, используя però с htmlentities
.)
Я пытаюсь объяснить это в основном, поэтому я прошу прощения, если я вас неправильно понял — я не собираюсь звучать снисходительно.
Других решений пока нет …