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

问题描述 投票:0回答:5

这个页面是通过一个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></title> 
    <link href="CSS/Index.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<h3>Search Results</h3> 
<table> 
<tbody> 
</tbody></table> 
</body> 
</html>

这里是我的代码在火狐浏览器中查看源码时的样子:

<?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);
?>
php html xhtml-1.0-strict xhtml
5个回答
4
投票

它没有通过验证,因为你的tbody里什么都没有。增加一些列的行,就可以验证了。


1
投票

我不知道那个for循环能不能用。另外,你似乎没有使用 $counter 的任何东西。试试用while代替。

while ( $row = mysql_fetch_row( $result ) )

如果还是没有任何回音的话, 你可能一开始就没有任何行要取. 所以在你的 <tbody> 标签,以及一个空的 <tbody> 被认为是无效的XHTML。


0
投票

你的代码看起来是对的,生成的HTML看起来也是对的,但我假设mysql_fetch_row会返回一些东西。 是否有可能这是在发送一些看起来像HTML标签的东西?

这是我要开始寻找的地方。 确认PHP的语法是正确的,并且返回的是你所期望的东西。


0
投票

只有当表中有行时,才会包含所有的表。如果你提供了更多的php脚本,一个if语句应该很容易排除它们,并允许它验证。

EDIT.我没有完全理解你的问题,直到你提供了更多的php脚本,一个if语句应该很容易排除它们,并允许它验证。 我没有完全理解你的问题,直到我看到另一个解决方案的评论。

这里发生的情况是你的查询依赖于POST数据,或cookies,或某种数据没有被验证器传递。解决方法可以是在你的查询中设置一个默认值,以防没有发送。如果没有发送post数据,你也可以像我原来说的那样,把表全部砍掉。


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
}
?>
© www.soinside.com 2019 - 2024. All rights reserved.