特殊字符

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便是就是&#xA9;(或&#XA9;),用十进制NCR表示就是&#169;。实际应用中十进制表示法更普遍一些。注意,数字字符引用中的数字值开头的0可以省略。
用这种方式对特殊字符编码称为转义(escaping),因为这些嵌入的代码被排除在常规的HTML/XHTML标记代码的解析过程之外。字符&本身就是需要转义的字符,因为未经转义的&会被当成字符引用的开始。可以使用&amp;或&#38;对&进行编码,这也适用于属性(cite、src、href)值中的URI的&符号。

所有的Unicode字符都可以用NCR表示,如“&#229;”代表“å”,“&#x6C34;”代表汉字“水”。可以参考网站www.j-a-b.net/web/char/char-unicode-bmp

字符实体(Character entity)
字符实体是用英文单词或单词缩(字符实体名,Character Entity Name)写来表示特殊字符的,所以可能更方便记一些。字符实体必须在置标语言(如HTML、XHTML)的DTD中预先定义好了才能使用。比如,版权符号©在HTML中可以用&copy;来表示,因为它已经在HTML的DTD中声明过了。可见,字符实体是由开头“&”结尾“;”加上字符的字符实体名构成的,如&copy;表示版权符号©,&gt;表示>,&lt;表示 <。
字符引用不仅适用HTML/XHTML文档中的普通文本,也适用属性值,例如<span title="&quot; This is tool tip&quot;">…</span>
不是所有的字符引用都可以用字符实体名表示,也就是说有的NCR没有对应的Character Entity Name。此外,为了与那些用于解析XML、但不支持全部实体名的设备保持最大程度的兼容,在HTML/XHTML文档中通常建议使用数字字符引用。
字符实体尾部的分号“;”可以省略,大部分浏览器可以正常显示,但为了兼容各种版本的浏览器,建议不要省略。
下表列出了常用的字符引用,更多的字符引用见附录。

常用特殊字符
字符 说明 实体 数值引用
&
<
>




"
'
 
×
÷


®
©

¢
£
¥
表示“和”的符号(ampersand)
小于
大于
左单引号
右单引号
左双引号
右双引号
双引号
单引号
非断行空格(non-breaking space)
乘号
除号
短破折号(en dash)
长破折号(em dash)
注册商标符号
版权符号
商标符号

英镑
人民币元
&amp;
&lt;
&gt;
&lsquo;
&rsquo;
&ldquo;
&rdquo;
&quot;
&apos;
&nbsp;
&times;
&divide;
&ndash;
&mdash;
&reg;
&trade;
&copy;
&cent;
&pound;
&yen;
&#38;
&#60;
&#62;
&#8216;
&#8217;
&#8220;
&#8221;
&#34;
&#39;
&#160;
&#215
&#247;
&#8211;
&#8212;
&#174;
&#169;
&#8482;
&#162;
&#163;
&#165;

根据使用经验发现IE在使用字符引用方面似乎更智能一些,例如<span title="标题:新闻标题&#x000D;&#x000A;点击次数:80">新闻标题</span>,在IE 6 中“新闻标题”的鼠标提示内容会换行,而FireFox 2却不会换行只会把换行和回车显示为空格;又如&copy也能被IE 6识别为©,而Firefox 1却不能。

更多的字符实体参见附录HTML附加命名实体ISO Latin-1字符集特殊文本和BIDI文本的字符实体

2. 空白符
在编辑HTML代码时可以随意编排其格式。换行和缩进可以让代码更具可读性,所以被普遍采用。对嵌套的块级元素进行缩进有助于看清特定代码开始和结束的位置,并避免发生嵌套错误或忘记正确的闭合标签结束元素的情况。
Web浏览器会忽略多余的换行和回车符,并把多个空格(包括制表符)压缩为一个空格,此外,紧靠后开始标签或紧靠前结束标签的空格也会被忽略。以下的代码演示了空格是如何压缩的,这是个极端的例子:

<p>

Wide     Open
        Space     !
</p>
虽然代码中的空格、回车符、制表符完好无损,但得到的结果可能是这样的:
Wide Open Space !

有时你可能想保留代码中额外的空格、制表符、换行符,如在页面上显示诗歌或集设计代码的时候。元素pre正是用于这种描述多段预先编排过格式的文本的场合。如果不想使pre元素(处处都使用也是不现实的),则可以使用字符参考来在HTML文档中产生空白符,如&nbsp;表示一个非断行空格(non-breaking space),它和&#160;是等价的。

然而不少的设计者使用非断行空格&nbsp;连续产生多个不断行的空格从而形成额外空白作为段落缩进,还使用中文全角空格“ ”作为段落缩进的空白,这样会长生很多表现性的代码,因而不建议大量使用,可以使用样式表来完成这些功能。