特殊字符
1. 字符引用
HTML文件用的是标准的ASCII字符集(这些字符就印在键盘上)。有时要显示非ASCII字符,这时就需要使用字符引用(character reference)。有的ASCII字符,如<和>,是HTML的控制字符,要在网页中正确地把它们全部显示出来则也需要使用字符引用。HTML中特殊符号的字符引用有两种形式,数字字符引用(NCR,Numeric Character Reference)和字符实体(Character Entity)。◇ 数字字符引用(NCR)使用该字符的Unicode字符代码来表示该字符。NCR总是以&#开头和;结尾的。中间的数值可以是十进制或十六进制的,十六进制的数值前要加上x。所以NCR可以有两种形式:“&#D”(D为对应的十进制数值),“&#xH”(为对应的十六进制数值,前面的x不区分大小写)。
例如,版权符号©在Unicode中的位置是第169(U+00A9),用十六进制NCR便是就是©(或©),用十进制NCR表示就是©。实际应用中十进制表示法更普遍一些。注意,数字字符引用中的数字值开头的0可以省略。
用这种方式对特殊字符编码称为转义(escaping),因为这些嵌入的代码被排除在常规的HTML/XHTML标记代码的解析过程之外。字符&本身就是需要转义的字符,因为未经转义的&会被当成字符引用的开始。可以使用&或&对&进行编码,这也适用于属性(cite、src、href)值中的URI的&符号。
◇ 字符实体(Character entity)
字符实体是用英文单词或单词缩(字符实体名,Character Entity Name)写来表示特殊字符的,所以可能更方便记一些。字符实体必须在置标语言(如HTML、XHTML)的DTD中预先定义好了才能使用。比如,版权符号©在HTML中可以用©来表示,因为它已经在HTML的DTD中声明过了。可见,字符实体是由开头“&”结尾“;”加上字符的字符实体名构成的,如©表示版权符号©,>表示>,<表示 <。
字符引用不仅适用HTML/XHTML文档中的普通文本,也适用属性值,例如<span title="" This is tool tip"">…</span>
不是所有的字符引用都可以用字符实体名表示,也就是说有的NCR没有对应的Character Entity Name。此外,为了与那些用于解析XML、但不支持全部实体名的设备保持最大程度的兼容,在HTML/XHTML文档中通常建议使用数字字符引用。
字符实体尾部的分号“;”可以省略,大部分浏览器可以正常显示,但为了兼容各种版本的浏览器,建议不要省略。
下表列出了常用的字符引用,更多的字符引用见附录。
字符 | 说明 | 实体 | 数值引用 |
---|---|---|---|
& < > ‘ ’ “ ” " ' × ÷ – — ® © ™ ¢ £ ¥ |
表示“和”的符号(ampersand) 小于 大于 左单引号 右单引号 左双引号 右双引号 双引号 单引号 非断行空格(non-breaking space) 乘号 除号 短破折号(en dash) 长破折号(em dash) 注册商标符号 版权符号 商标符号 分 英镑 人民币元 |
& < > ‘ ’ “ ” " ' × ÷ – — ® ™ © ¢ £ ¥ |
& < > ‘ ’ “ ” " '   × ÷ – — ® © ™ ¢ £ ¥ |
根据使用经验发现IE在使用字符引用方面似乎更智能一些,例如<span title="标题:新闻标题
点击次数:80">新闻标题</span>,在IE 6 中“新闻标题”的鼠标提示内容会换行,而FireFox 2却不会换行只会把换行和回车显示为空格;又如©也能被IE 6识别为©,而Firefox 1却不能。
更多的字符实体参见附录HTML附加命名实体、ISO Latin-1字符集及特殊文本和BIDI文本的字符实体。2. 空白符
在编辑HTML代码时可以随意编排其格式。换行和缩进可以让代码更具可读性,所以被普遍采用。对嵌套的块级元素进行缩进有助于看清特定代码开始和结束的位置,并避免发生嵌套错误或忘记正确的闭合标签结束元素的情况。
Web浏览器会忽略多余的换行和回车符,并把多个空格(包括制表符)压缩为一个空格,此外,紧靠后开始标签或紧靠前结束标签的空格也会被忽略。以下的代码演示了空格是如何压缩的,这是个极端的例子:
Wide Open
Space !
</p>
Wide Open Space !
有时你可能想保留代码中额外的空格、制表符、换行符,如在页面上显示诗歌或集设计代码的时候。元素pre正是用于这种描述多段预先编排过格式的文本的场合。如果不想使pre元素(处处都使用也是不现实的),则可以使用字符参考来在HTML文档中产生空白符,如 表示一个非断行空格(non-breaking space),它和 是等价的。
然而不少的设计者使用非断行空格 连续产生多个不断行的空格从而形成额外空白作为段落缩进,还使用中文全角空格“ ”作为段落缩进的空白,这样会长生很多表现性的代码,因而不建议大量使用,可以使用样式表来完成这些功能。