我有一个简单的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源文件以验证标记时,我收到了这些错误消息,并且对于每个错误,开头“after value =以红色突出显示:
字符“&lt;”是分隔符的第一个字符,但是作为数据出现
Unescaped'&lt;'属性值中不允许
属性构造错误
如何解决此问题,以免出现验证错误?
答案 0 :(得分:0)
正如您在评论中已经知道的那样,W3C Validator不能用于验证PHP文件。如果可以从Internet访问该页面,则使用其URL,否则使用浏览器&#34;查看源&#34;命令查看生成的HTML并将HTML复制粘贴到验证器中。
这不是W3C Validator的限制。通过查看PHP源代码无法验证HTML。 PHP是一种动态语言,通过执行代码,您可以根据输入获得不同的HTML输出。
不使用任何验证器,您发布的代码有一个强大的缺陷:如果$hoursWorked
是包含"
(双引号)的字符串,则生成的HTML是不正确的标记片段呈现为文本通过浏览器。
想象一下如果$hoursWorked
为'2">'
会发生什么。生成的HTML是:
<input type="text" name="hours" value="2">" />
并且片段" />
在渲染输出中变得可见,因为它不再是标记的一部分。
当动态内容呈现为HTML而未正确编码为HTML时,会发生这种情况。 PHP提供了必须始终用于正确编码(作为HTML)用于生成HTML的内容的函数htmlspecialcharacters()
。特别是当从外部源(从浏览器,f.e。)检索内容时。代码应该是:
<input type="text" name="hours" value="<?php echo htmlspecialchars($hoursWorked); ?>" />
<input type="text" name="wage" value="<?php echo htmlspecialchars($hourlyWage); ?>" />
除此之外,发布的代码生成的HTML看起来很好。