XML声明可能是必须的
如果要使用UTF-8或者UTF-16以外的变法,必须要XML声明,除非HTTP头已经提供编码。
在HTTP头中是否要指定字符编码有些模糊,Architecture of the World Wide Web, Volume One: Media Types for XML这样写的:
总体上,不应该在协议头为XML数据指定字符编码,因为数据本身已描述。
另一方面, XHTML 1.0, Second Edition: Character Encoding 1.0, Second Edition: Character Encoding写到:
为了让文档使用指定的字符编码,最好的办法是保证web服务器发送正确的头。
就是说,在XML声明中指定字符编码是好的习惯:
<?xml version="1.0" encoding="iso-8859-1"?>
只有五个实体是安全的
只有五个预定义的实体(<, >, &, ", 和')的支持是有保证的。其他的可能完全被忽略或者直接输出。比如,如果
XHTML文档包含如 或者”的实体,Safari会直接地输出。Opera反而选择忽略未知的实体,同时Mozila家族会认得这些实体并且就像HTML中
“如果文档引用公共的映射浏览器伪
DTD目录中的标识符并且没有单独声明的文档”
来处理。
使用UTF-8字符编码是最受推荐的,让你(几乎)可以使用你需要键入文档的任意字符,不需要实体或者字符编号。如果你不能或不愿使用UTF-8,数字式的字符编号是可以支持和安全使用的。
SGML式注释的内容可能会被忽略
SGML注释(
HTML风格注释, <!-- 注释 -->)可能会(并且会)被浏览器当作注释,就算是在script或者style元素内部使用。
在
HTML中,普遍地把script和style的内容装入注释中,为的是在不认识script或style元素的浏览器中隐藏他们,并且在页面上把其内容生成平白文本。
在 XHTML中,这样做会引起浏览器忽略掉注释里的任何内容。
在老的浏览器中隐藏script和style的习惯可以追溯到1990年代中期。我的经验是,有如此表现的浏览器是十分罕见的,所以你可以安全地忽略它们,并且停止在脚本和样式中装入SGML式注释,就算你使用的是HTML。
脚本和样式元素的内容也被当作XML
样式和脚本元素是PCDATA(parsed character data,解析字符数据)块,不是CDATA(character data,字符数据)块。因此,在其内看起来像XML的任何东西都会被当作XML来解析,并且会引发错误除非是良构的。
为了在script或style块中使用<、&或者--,你需要用CDATA :
<script type="text/javascript"> <![CDATA[ ... ]]> </script> 在CDATA里,你可以任何顺序的字符,它们不会被当作XML来解析(除了结束CDATA部分]]>)。
需要以text/html发送的文档中,CDATA部分的起始和结束标签需要注释掉,以便在不能处理CDATA部分的浏览器中隐藏:
<script type="text/javascript"> // <![CDATA[ ... // ]]> </script> <style type="text/css"> /* <![CDATA[ */ ... /* ]]> */ </style>