将echo PHP变量用作输入字段值时出现验证错误

将echo PHP变量用作输入字段值时出现验证错误,php,w3c-validation,Php,W3c Validation,我有一个简单的HTML表单,我使用PHP验证用户输入。如果表单中有错误,我将重新显示表单,保留正确的值,以便用户只能修改有错误的字段。一切都按预期进行,但当我尝试验证标记时,我在这一行出现了错误: <input type="text" name="hours" value="<?php echo $hoursWorked; ?>" /> 正如您已经从注释中了解到的,不能使用验证PHP文件。如果可以从Intern

我有一个简单的HTML表单,我使用PHP验证用户输入。如果表单中有错误,我将重新显示表单,保留正确的值,以便用户只能修改有错误的字段。一切都按预期进行,但当我尝试验证标记时,我在这一行出现了错误:

<input type="text" name="hours" value="<?php echo $hoursWorked; ?>" />

正如您已经从注释中了解到的,不能使用验证PHP文件。如果可以从Internet访问页面,则使用其URL,否则使用浏览器的“查看源代码”命令查看生成的HTML并将HTML复制粘贴到验证程序中

这不是W3C验证程序的限制。无法通过查看PHP源代码来验证HTML。PHP是一种动态语言,通过执行代码,您可以根据输入获得不同的HTML输出

未使用任何验证器,您发布的代码有一个严重缺陷:如果
$hoursWorked
是一个包含
(双引号)的字符串,则生成的HTML是不正确的,浏览器会将标记片段呈现为文本

想象一下,如果
$hoursWorked
'2'>
,会发生什么。生成的HTML是:

<input type="text" name="hours" value="2">" />

除此之外,由发布的代码生成的HTML看起来不错。

问题还不清楚。
$hoursWorked
的值是多少?该输入是如何单独使用还是在已经打开的php标记中使用的?请尝试
htmlentities
-@softengstu。问题是“
$hoursWorked
的值是多少”,您还没有回答它php是一种脚本语言。W3验证程序验证HTML。这些都是非常不同的事情。如果你要验证任何东西,请在浏览器中打开“查看源代码”页面并复制标记,而不是PHP源代码
<input type="text" name="hours" value="2">" />
<input type="text" name="hours" value="<?php echo htmlspecialchars($hoursWorked); ?>" />
<input type="text" name="wage" value="<?php echo htmlspecialchars($hourlyWage); ?>" />