1

通过 W3C 验证器运行我的页面时出现此错误:

= 在未引用的属性值中。可能的原因:一起运行的属性或未加引号的属性值中的 URL 查询字符串。

这是导致此错误的代码:

$prevPage = "?main=men&category1=1&pagenum=$prevp"."&lowRowNum=$prev_page_low".
                    "&highRowNum=$prev_page_high";

print("<a class='left' href=$prevPage>".
                    "Previous Page</a>&nbsp;&nbsp;&nbsp;");

在我的任何其他 PHP 脚本中,我都没有收到任何类似的错误,所以我猜这是我在这里做错的具体事情?

谁能看到为什么这段代码会导致这个错误?

我对此进行了研究并读到它可能归结为 HTML 特殊字符?我不确定..

谢谢

4

2 回答 2

5

只需尝试:

<a class='left' href='$prevPage'>

注意引号。始终尝试在 HTML 中引用您的属性。更好的做法是:

echo '<a class="left" href="' . $prevPage . '">' //etc etc;

尽量不要回显整个 HTML 字符串,因为在使用单引号和双引号时可能会感到困惑。

于 2012-04-30T16:22:13.713 回答
2

我建议在这里使用printf()和的组合htmlentities()

printf(
  '<a class="left" href="%s">Previous Page</a>'
    , htmlentities($prevPage)
);

printf()echo在替换特殊格式的标记后获取一个字符串并s 。在上面的示例中,字符串中有一个标记,表示为%s

运行时printf(),它将每个标记替换为相应的参数。在上面的示例中,%s被 的结果替换htmlentities($prevPage)

手册页sprintf()更详细地介绍了令牌的工作原理,并提供了更多示例(除了返回格式化的字符串,而sprintf()直接输出它printf()之外,其余都是相同的)。sprintf()printf()

为确保&对标记验证等实体进行正确编码,您还应该使用htmlentities().

于 2012-04-30T16:38:34.013 回答