SyntaxHighlighter(目前版本 1.5.1)在幫 pre 標籤變色時,需要 name="code" 這樣的標記才能生效,很不幸 pre 的 name 屬性不在 XHTML 1.0 規範內;所以如果你很喜歡 valid 的貼紙,還是參考 kev.in » Using dp.SyntaxHighlighter with Valid XHTML 自行改造 shCore.js 吧,改三行程式即可。

先確認改完後的用法:假設以 dp.SyntaxHighlighter.HighlightAll('code'); 啟動 SyntaxHighlighter,則網頁的 HTML 可以是 <pre class="code html">,或如原文所述用 <code> 標籤的進階語法。至於舊的 <pre name="code" class="html"> 寫法不必全面更新沒關係,仍然可以相容(當然仍不符標準)。


詳細步驟原文寫得很清楚,這邊只提出最後 regex 的部分:

options = options.replace(new RegExp("\\s*"+ name +"\\s*"),'');

原文中 RegExp("^"+name+"\\s") 僅符合 class="code html" 其中 code 出現在開頭的情形;改為以上 pattern 的話則會符合 class="html code  ",應該有稍微通用一點才是。

註:我自己是用 <pre class="javascript sh-code"> 這種型式。

Valid XHTML 1.0 Strict