通过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> ");
我在其他任何PHP脚本中都没有收到任何类似的错误,所以我猜这是我在做错的具体事情吗?
有人能看出为什么这段代码导致了这个错误吗?
我已经研究过这个并且读到它可能是HTML特殊字符?我不确定..
谢谢
答案 0 :(得分:5)
只需尝试:
<a class='left' href='$prevPage'>
注意引号。始终尝试在HTML中引用您的属性。更好的做法是:
echo '<a class="left" href="' . $prevPage . '">' //etc etc;
尽量不要回显整个HTML字符串,因为在使用单引号和双引号时可能会感到困惑。
答案 1 :(得分:2)
我建议在这里使用printf()
和htmlentities()
的组合:
printf(
'<a class="left" href="%s">Previous Page</a>'
, htmlentities($prevPage)
);
printf()
在替换特殊格式的标记后需要一个字符串echo
。在上面的示例中,字符串中有一个标记,表示为%s
。
当printf()
运行时,它会用相应的参数替换每个标记。在上面的示例中,%s
替换为htmlentities($prevPage)
的结果。
The manual page for sprintf()
详细介绍了令牌的工作方式,并提供了更多示例(sprintf()
和printf()
相同,只是sprintf()
返回格式化的字符串,而{ {1}}直接输出。)
为了确保printf()
等实体能够正确编码以进行标记验证,您还应该使用&
。