使用echo PHP变量作为输入字段的值时的验证错误

时间:2018-02-04 23:46:54

标签: php w3c-validation

我有一个简单的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" />&nbsp;
        &nbsp;<input type="submit" name="Submit" value="Send Form" /></p>
    </form>
    <?php }

当我上传.php源文件以验证标记时,我收到了这些错误消息,并且对于每个错误,开头“after value =以红色突出显示:

  

字符“&lt;”是分隔符的第一个字符,但是作为数据出现

     

Unescaped'&lt;'属性值中不允许

     

属性构造错误

如何解决此问题,以免出现验证错误?

1 个答案:

答案 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看起来很好。