У меня есть простая форма HTML, и я использую PHP для проверки ввода пользователя. Если в форме есть ошибки, я перезапускаю форму, сохраняя значения в порядке, так что пользователь может изменять только те поля, в которых есть ошибки. Все работает как положено, но когда я попытался проверить разметку, я получил ошибки в этой строке:
<input type="text" name="hours" value="<?php echo $hoursWorked; ?>" />
Вот функция, которая повторно отображает форму:
function redisplayForm($hoursWorked, $hourlyWage) {
?> <h2 style = "text-align:center">Paycheck Form</h2>
<form action="process_Paycheck.php" method="post">
<p>Hours Worked: <input type="text" name="hours" value="<?php echo $hoursWorked;?>" /></p>
<p>Hourly Wage: <input type="text" name="wage" value="<?php echo $hourlyWage;?>" /></p>
<p><input type="reset" value="Clear Form" />
<input type="submit" name="Submit" value="Send Form" /></p>
</form>
<?php }
Когда я загрузил исходный файл .php для проверки разметки, я получил эти сообщения об ошибках, и для каждой из этих ошибок открытие «после значения =» выделяется красным цветом:
Символ «<«является первым символом разделителя, но встречается как данные
Unescaped ‘<не допускается в значениях атрибутов
Атрибуты конструируют ошибку
Как я могу это исправить, чтобы я не получил ошибки проверки?
Как вы уже знаете из комментариев, W3C Validator не может использоваться для проверки файлов PHP. Если к странице можно получить доступ из Интернета, используйте ее URL-адрес, в противном случае используйте команду браузера «Просмотр источника» для просмотра сгенерированного HTML-кода и вставьте его в валидатор.
Это не ограничение W3C Validator. Нет способа проверить HTML, посмотрев на источник PHP. PHP является динамическим языком, выполняя код, вы можете получить различный вывод HTML в зависимости от ввода.
Без использования какого-либо валидатора у размещенного вами кода есть один существенный недостаток: если $hoursWorked
это строка, которая содержит "
(двойные кавычки), сгенерированный HTML-код некорректной части разметки отображается браузером как текст.
Представь, что будет, если $hoursWorked
является '2">'
, Сгенерированный HTML-код:
<input type="text" name="hours" value="2">" />
и фрагмент " />
становится видимым в отображаемом выводе, потому что он больше не является частью разметки.
Это то, что происходит, когда динамический контент отображается в формате HTML без правильного кодирования в формате HTML. PHP предоставляет функцию htmlspecialcharacters()
это всегда должно использоваться для правильного кодирования (в виде HTML) контента, который используется для генерации HTML. Особенно, когда контент извлекается из внешнего источника (из браузера, например). Код должен быть:
<input type="text" name="hours" value="<?php echo htmlspecialchars($hoursWorked); ?>" />
<input type="text" name="wage" value="<?php echo htmlspecialchars($hourlyWage); ?>" />
Кроме того, HTML, сгенерированный размещенным кодом, выглядит нормально.
Других решений пока нет …