設計網頁幾乎都會遇到的問題…
版權符號 `©` (copyright sign),在 ISO 8859-1 (Latin 1) Character Set 就有的字符,被許多需要聲明著作權的網頁文件所採用,但因為網頁的語言編碼方式不一定是用 ISO 8859-1,我們時常需要使用其他替代方式來表示這個符號。
從 HTML 3.2 開始便有 ©
對應到 ©
的 Entity 設定,但由於 XSLT 的 DTD 在這部分並沒有定義,於是 XSLT Processor 判讀上就會出問題。
除非語言編碼採用 ISO 8859-1 或 Unicode 時可以直接寫 `©`,花了點時間在網路上看到許多解法,整理如下:
- Unicode 代碼法
©
或©
- 定義 DOCTYPE 並加入
©
的對應
<!DOCTYPE xsl:stylesheet [
<!ENTITY copy "©">
]> - 寫
&copy;
以在判讀過後吐出©
給瀏覽器
(註:這招在我做 XSLT 的時候沒效,它照樣吐&copy;
) - 用
<xsl:text disable-output-escaping="yes">©</xsl:text>
包住
(註:這招在我做 XSLT 的時候同樣沒效,不過改為<xsl:text disable-output-escaping="yes">&copy;</xsl:text>
卻能成功吐出©
)
在一開頭就定義 DOCTYPE 的做法似乎很不錯,而且 XSLT Processor 還會幫忙認編碼字集中有沒有收錄版權符號,以輸出 `©` 或是 ©
,不過並不是所有時候都能適用,我用 PHP 裡頭 XSLTProcessor() 的狀況便時好時壞。
XSLT 1.0 標準的建議是採用 disable-output-escaping 屬性將 ‘&’ 等等特殊符號脫逸(escape)掉。不過由於標準中並不要求 XSLT Processor 必須支援 disable-output-escaping,所以有可能遇到像前文提及的例外情況,顯然也不是個可以通吃的做法。
看來看去,恐怕 ©
還是最保守安全的寫法。