1

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

如何解决这个问题?

在此处输入图像描述

4

3 回答 3

3

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

只是不要使用嵌入式 SGML。

于 2013-08-03T17:53:54.147 回答
3

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

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

<!ATTLIST LI
  %attrs;>

经过

<!ATTLIST LI
  rel CDATA #IMPLIED
  %attrs;>

(也就是说,您需要提供允许的属性的完整列表,并添加您的自定义属性,而不是声明一个允许您的属性的属性列表 [除非那是您真正想要的]。)

然后,您将使用一个 doctype 声明,该声明通过其 URL 引用您的修改副本,其中

<!DOCTYPE HTML SYSTEM "dtdurl">

其中 dtdurl 是 DTD 的绝对 URL。更多信息:为 HTML 验证创建自己的 DTD

通常不建议添加您自己的属性,因为它们可能会与在某些未来版本中添加到 HTML 的属性发生冲突。根据 HTML5 草案,data-名称data-relrel.

于 2013-08-03T18:17:37.077 回答
0

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

<!DOCTYPE HTML PUBLIC 
"-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd" 
[<!ATTLIST li rel CDATA #IMPLIED&gt;]>

参考

于 2013-11-26T00:16:33.110 回答