我无法理解XHTML严格中的这个错误

时间:2011-03-09 04:25:43

标签: php html xhtml-1.0-strict xhtml

此页面是通过PHP脚本生成的。以下是错误消息:

  

第14行,第8列:“tbody”的结束标记   尚未完成

</tbody></table>
     

最有可能的是,嵌套标签和   以错误的顺序关闭它们。对于   示例<p><em>...</p>不是   可以接受,因为<em>必须关闭   在<p>之前。可接受的嵌套是:   <p><em>...</em></p>

     

另一种可能性是你使用过   需要孩子的元素   您未包含的元素。   因此,父元素是“不是   完成“,但不完整。例如,   在HTML中,<head>元素必须   包含<title>子元素,列表   需要适当的列表项(<ul>   并<ol>需要<li>;   需要<dt><dd>),等等   上。

以下是我在Google Chrome浏览器中查看源代码时的代码:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Donald Podhorsky</title> 
    <link href="CSS/Index.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<h3>Search Results</h3> 
<table> 
<tbody> 
</tbody></table> 
</body> 
</html>

以下是我在Firefox中查看源代码时的代码:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>PcDescribeTable</title>
<link href="CSS/Index.css" rel="stylesheet" type="text/css" /> 
</head>
<body>
<h3>Search Results</h3>
<table>
<tr><td>Intel i7-950 3.06GHz</td></tr>
<tr><td>WD 500GB 7200RPM SATA 6GBs</td></tr>
<tr><td>XFX Radeon HD 6870</td></tr>
<tr><td>CORSAIR 4GB DDR3 1600</td></tr>
<tr><td>ASUS P6X58D-E LGA 1366</td></tr>
<tr><td>CORSAIR Enthusiast Series 650W</td></tr>
<tr><td>VisonTek Bigfoot Killer</td></tr>
<tr><td>Creative Sound Blaster X-Fi HD</td></tr>
<tr><td>Razer Lycrosa</td></tr>
<tr><td>24x DVD Burner</td></tr>
<tr><td>Asus 23" Full HD LED</td></tr>
<tr><td>Razer Death Adder</td></tr>
</table>
</body>
</html>

这就是Php脚本的样子:

<table>
<tbody>
<?php
for ( $counter = 0; $row = mysql_fetch_row( $result ); $counter++ )
{
print("<tr>");
foreach ( $row as $key => $value )
print( "<td>".$value."</td>");
print("</tr>");
}
print("</tbody>");
print("</table>");
mysql_close($database);
?>

5 个答案:

答案 0 :(得分:4)

它没有通过验证,因为你的TBODY中什么也没有。添加一些带有列的行,它将验证。

答案 1 :(得分:1)

我不知道for循环是否有效。另外,您似乎没有使用$counter。请尝试改为:

while ( $row = mysql_fetch_row( $result ) )

如果仍然没有回显任何内容,那么您可能没有要开始获取的任何行。因此,<tbody>标记之间不会输出任何内容,而空<tbody>被视为无效的XHTML。

答案 2 :(得分:0)

如果表中有行,则只包括该表。如果你提供了更多的php脚本,if语句应该很容易排除它们并允许它进行验证。

编辑:在我看到对其他解决方案的评论之前,我完全不了解您的问题。

这里发生的是您的查询取决于POST数据或Cookie,或者验证程序未传递的某种数据。解决方案可能是在查询中有一个默认值,以防一个未发送。如我原先所说,如果没有发送的帖子数据,你也可以一起砍掉桌子。

答案 3 :(得分:0)

您的代码看起来正确并且生成的HTML看起来正确,但我认为mysql_fetch_row会返回一些内容。是否有可能发送看起来像HTML标签的东西?

这就是我开始寻找的地方。确认语法适合PHP并返回您期望的内容。

答案 4 :(得分:0)

使用PHP,使用if语句测试是否已发送查询。如果没有,甚至不要将表格打印到屏幕上。

<?php
if (mysql_fetch_row( $result )) {
?>
<table>
<tbody>
<?php
for ( $counter = 0; $row = mysql_fetch_row( $result ); $counter++ ) {
print("<tr>");
foreach ( $row as $key => $value )
print( "<td>".$value."</td>");
print("</tr>");
}
mysql_close($database);
?>
</tbody>
</table>
<?php
}
?>