1

今天我遇到了一个新问题。

大多数人可能已经知道, a:target="_blank" 不是 validate XHTML Strict。但今天我想在网站上添加 iPod、iPhone 和 iPad 的图标。为此需要的代码是:

<link rel="apple-touch-icon" href="logo_144.png" sizes="144x144" />

正如您可能猜到的那样,属性大小也无效。最大的问题是XHTML1.1是必须的。所以我不能去 HTML5 或过渡。我发现我可以使用自定义 DTD,这不是首选。我还发现可以添加一些自定义 DTD 行来扩展原始文件。代码是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [
    <!ATTLIST link sizes CDATA #IMPLIED >
]>

这显然没有完成这项工作,将“]>”打印到页面中,给了我更多错误,例如没有字符集。我试图将“PUBLIC”更改为“SYSTEM”,但没有任何运气。

有正确的方法吗?提前致谢!

4

4 回答 4

1

有正确的方法吗?

不。

您可以使用 XHTML 1.1(没有 XHTML 1.1 Strict 之类的东西),也可以在元素上使用带有sizes属性的东西。link

如果您使用自定义 DTD,那么您将不再使用 XHTML 1.1(您正在使用您的自定义语言)。

于 2012-06-11T09:33:14.503 回答
1

您始终可以使用类型而不是大小。

<link rel="apple-touch-icon" type="72x72" href="/theme/mobile/72x72.png" />
于 2013-02-14T22:25:54.670 回答
0

根据您的喜好,有两种正确的方法可以做到这一点。

您上面的示例看起来是正确的,我不确定您正在尝试使用哪个浏览器打印]>- 它可能是 ATTLIST 末尾的额外空间:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [
    <!ATTLIST link sizes CDATA #IMPLIED>
]>

另一个——可能稍微简单一点——的选择是选择HTML5 的 XML 序列化(通常称为 XHTML5);由于在 HTML5 中添加了 size 属性,这似乎是最有意义的。使用它,您可以完全排除 doctype,因为HTML5 验证器选择 RELAX NG Schema 进行验证而不是 DTD,但通常建议保留 doctype,以便使用HTML5 Polyglot与 IE8 及以下版本兼容。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
于 2012-06-16T23:04:56.480 回答
0

如果您想抑制属性大小验证错误以验证文档的其余部分,您可以<!ATTLIST link sizes CDATA #IMPLIED>在验证时即时插入。这是一个xmllint例子:

sed '/<!DOCTYPE/ {
        s/\([^>]*\)/\1 [<!ATTLIST link sizes CDATA #IMPLIED>]/
    }
    ' input.html | \
xmllint --noout --valid - 2>/dev/null || \
echo "Not valid: input.html"
于 2014-07-08T23:37:03.640 回答