在DTD浏览器中的ATTLIST声明后呈现自定义字符

时间:2013-08-03 17:37:21

标签: html debugging doctype dtd

我在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>代码有效,但我有另一个发行者:浏览器在文档中呈现"]>"个字符。

如何解决这个问题?

enter image description here

3 个答案:

答案 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-relrel更安全。

答案 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&gt;]>

<强>参考