我有一个html表单,其中包含由段落标记组成的输入容器。表单提交后,我使用php函数循环遍历任何给定的错误。我遇到的问题是错误容器的段落标记(在我的php函数中生成)过早关闭,以便无序列表最终位于所有段落旁边而不是在其自己的段落中。
我在这个问题上找到了类似的主题,但在大多数情况下,他们只是忘了关闭表单中的元素或者以错误的方式使用表格。
最初我在一个更大的项目中使用了这个代码但是我创建了一个新文件并尽可能地简化了它。
HTML已在其他人推荐的w3c Markup Validator中经过测试,没有任何错误。
index.php文件
<?php
$array_with_errors = [
'An error message',
'Another error message',
'A third error message'
];
function display_errors($errors = array()) {
if(!empty($errors)) {
$html = '<p class="form-field">';
$html .= '<ul class="form-errors">';
foreach($errors as $error) {
$html .= '<li class="form-error">'.$error.'</li>';
}
$html .= '</ul>';
$html .= '</p>';
return $html;
}
}
?>
<html>
<head>
<title>Document</title>
</head>
<body>
<form action="index.php" method="POST">
<?php echo display_errors($array_with_errors); ?>
<p class="form-field">
<span>Username</span>
<input type="text" name="username">
</p>
<p class="form-field">
<span>Password</span>
<input type="password" name="password">
</p>
<p class="form-field">
<input type="submit" name="submit">
</p>
</form>
</body>
</html>
因此,即使使用此代码,我也会在Chrome,Firefox和IE11中获得以下结果。
显示结果的图片:
我玩过PHP来找到原因。
将单引号更改为双引号并转义类属性周围的双引号。
$html .= "<li class=\"form-error\">".$error."</li>";
以不同方式连接
$html .= "<li class=\"form-error\">{$error}</li>";
我甚至厌倦了像这样直接输出错误
<p class="form-field">
<ul class="form-errors">
<?php
foreach($array_with_errors as $error) {
echo "<li class=\"form-error\">{$error}</li>";
}
?>
</ul>
</p>
仍然没有区别。
这可能与PHP如何处理输出有关吗?