在 XSL 表示版權符號 © (Copyright Sign) 的方式

設計網頁幾乎都會遇到的問題…

版權符號 `©` (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 "&#169;">
    ]>

  • &amp;copy; 以在判讀過後吐出 &copy; 給瀏覽器
    (註:這招在我做 XSLT 的時候沒效,它照樣吐 &amp;copy;)
  • <xsl:text disable-output-escaping="yes">&copy;</xsl:text> 包住
    (註:這招在我做 XSLT 的時候同樣沒效,不過改為 <xsl:text disable-output-escaping="yes">&amp;copy;</xsl:text> 卻能成功吐出 &copy;)

在一開頭就定義 DOCTYPE 的做法似乎很不錯,而且 XSLT Processor 還會幫忙認編碼字集中有沒有收錄版權符號,以輸出 `©` 或是 &#169;,不過並不是所有時候都能適用,我用 PHP 裡頭 XSLTProcessor() 的狀況便時好時壞。

XSLT 1.0 標準的建議是採用 disable-output-escaping 屬性將 ‘&’ 等等特殊符號脫逸(escape)掉。不過由於標準中並不要求 XSLT Processor 必須支援 disable-output-escaping,所以有可能遇到像前文提及的例外情況,顯然也不是個可以通吃的做法。

看來看去,恐怕 &#169; 還是最保守安全的寫法。

分類: XML / XSLT。這篇內容的永久連結

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。