我在DTD中为rel="value"
元素声明了<li>
属性,如下所示:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" [<!ATTLIST li rel CDATA #IMPLIED>]>
之后我的<li rel="value"></li>
代码有效,但我有另一个发行者:浏览器在文档中呈现"]>"
个字符。
如何解决这个问题?
答案 0 :(得分:3)
浏览器不了解嵌入式SGML。他们只是停止在第一个>
字符处阅读doctype。因此,他们将以下]>
视为要呈现的文本。
只是不要使用嵌入式SGML。
答案 1 :(得分:3)
您不应在doctype声明中使用内部子集,因为浏览器根本不理解它,或者根本不理解DTD。
如果您使用简单的添加属性,出于某种原因,通常最好小心使用它,或“手动检查”。但是要执行基于DTD的验证,您需要构建一个外部DTD,基于您希望用作基础的DTD,并添加额外的标记。在这种情况下,您将复制HTML 4.01 Transitional DTD并替换
<!ATTLIST LI
%attrs;>
通过
<!ATTLIST LI
rel CDATA #IMPLIED
%attrs;>
(也就是说,您需要提供已添加自定义属性的允许属性的完整列表,而不是声明仅允许您的属性的属性列表[除非您真正想要的] 。)
然后,您将使用doctype声明,该声明通过其URL引用您的修改后的副本
<!DOCTYPE HTML SYSTEM "dtdurl">
其中dtdurl是DTD的绝对URL。更多信息:Creating your own DTD for HTML validation。
通常不建议添加您自己的属性,因为它们可能会与某些未来版本中可能添加到HTML的属性发生冲突。根据HTML5草稿,名称以data-
开头的属性仅供特定于网站使用,并且永远不会有任何公开定义的含义,因此data-rel
比rel
更安全。
答案 2 :(得分:0)
使用伪属性&amp; gt; 分隔符而不是文字&gt; 分隔符来转义>
中的嵌套]>
:
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
[<!ATTLIST li rel CDATA #IMPLIED>]>
<强>参考强>