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

Html DTD浏览器中的ATTLIST声明后呈现自定义字符,html,debugging,doctype,dtd,Html,Debugging,Doctype,Dtd,我为DTD中的元素声明了rel=value属性,如下所示: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" [<!ATTLIST li rel CDATA #IMPLIED>]> 在此之后,我的代码是有效的,但我得到了另一个颁发者:Browser renders]>文档中的字符 如何解决这个问题 浏览器不理解嵌入式S

我为DTD中的元素声明了rel=value属性,如下所示:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" [<!ATTLIST li rel CDATA #IMPLIED>]>
在此之后,我的代码是有效的,但我得到了另一个颁发者:Browser renders]>文档中的字符

如何解决这个问题


浏览器不理解嵌入式SGML。他们只是在第一个>字符处停止读取doctype。因此,他们将以下]>视为要呈现的文本


只是不要使用嵌入式SGML。

浏览器不理解嵌入式SGML。他们只是在第一个>字符处停止读取doctype。因此,他们将以下]>视为要呈现的文本


不要使用嵌入式SGML。

您不应该在doctype声明中使用内部子集,因为浏览器根本不理解它或DTD

如果您使用简单的添加属性,出于某种原因,通常最好只是足够小心,或者“手动检查”。但是,要执行基于DTD的验证,您需要基于希望用作基础的DTD构造一个外部DTD,并在其中添加额外的标记。在本例中,您将复制HTML4.01过渡DTD并替换它

<!ATTLIST LI
  %attrs;>

也就是说,您需要提供允许属性的完整列表,并添加自定义属性,而不是取消仅允许您的属性的属性列表[除非这是您真正想要的]

然后,您将使用doctype声明,该声明通过URL引用修改后的副本,并带有

<!DOCTYPE HTML SYSTEM "dtdurl">
其中dtdurl是DTD的绝对URL。更多信息:


通常不建议添加您自己的属性,因为它们可能会与某些未来版本中可能添加到HTML中的属性冲突。根据HTML5草案,名称以数据开头的属性用于特定于站点的用途,并且永远不会有任何公开定义的含义,因此数据rel比rel更安全。

您不应该在doctype声明中使用内部子集,因为浏览器根本不理解它或DTD

如果您使用简单的添加属性,出于某种原因,通常最好只是足够小心,或者“手动检查”。但是,要执行基于DTD的验证,您需要基于希望用作基础的DTD构造一个外部DTD,并在其中添加额外的标记。在本例中,您将复制HTML4.01过渡DTD并替换它

<!ATTLIST LI
  %attrs;>

也就是说,您需要提供允许属性的完整列表,并添加自定义属性,而不是取消仅允许您的属性的属性列表[除非这是您真正想要的]

然后,您将使用doctype声明,该声明通过URL引用修改后的副本,并带有

<!DOCTYPE HTML SYSTEM "dtdurl">
其中dtdurl是DTD的绝对URL。更多信息:

通常不建议添加您自己的属性,因为它们可能会与某些未来版本中可能添加到HTML中的属性冲突。根据HTML5草案,名称以data开头的属性用于站点特定用途,并且永远不会有任何公开定义的含义,因此data rel比rel更安全。

使用伪属性分隔符而不是文字>分隔符来转义嵌套的>内]>:

参考资料

使用伪属性分隔符而不是文字>分隔符来转义]>中的嵌套>:

参考资料


我需要使用,因为我向HTML元素添加了自定义属性,并需要对其进行验证。因此,没有其他方法可以修复此浏览器问题?添加嵌入式SGML不会使您的HTML有效。它只会阻止旧的基于SGML的验证器告诉您它是无效的。如果您想使用无效的HTML,只需使用它。验证器只是一个帮助您的工具。不,在浏览器中没有解决方法。我需要使用,因为我向HTML元素添加了自定义属性,并且需要验证它。因此,没有其他方法可以修复此浏览器问题?添加嵌入式SGML不会使您的HTML有效。它只会阻止旧的基于SGML的验证器告诉您它是无效的。如果您想使用无效的HTML,只需使用它。验证器只是一个帮助您的工具。不,在浏览器中没有解决方法。