跳到主要內容

工具庫 - 自訂 Java BBCode Parser

BBCode 是常在論壇還是一些輕量級應用使用的標籤
他在實際執行時會從 [b]test[/b] 這樣的標籤轉譯成 HTML 標籤 <b>test</b>
開放讓使用者自行撰寫 HTML 內容時,容易有撰寫錯誤或XSS安全性問題
所以使用這種限定規格的標籤,對使用者來說是比較容易的,對網站方也是相對好處理的

不過在搜尋既有的 Solutions 時發現多數都是 JavaScript 用的 Library
Java使用者最常被推薦的可能是 kefirbb,只是查看了規格後我是不太想使用
因為我不需要其他的標籤轉換功能,例如 Markdown 之類的
我也不想維護一個並不是一目瞭然的格式轉換用的 XML,需要加入或修改標籤時會有困難

滿多人會選擇自行寫簡單的 regular expression 轉換
不過幾乎網路上查到的 pattern 都沒法處理好巢狀(nested) BBCode 結構
以及新的標籤要對應不同的 regular expression,我也覺得是一種負擔

後來我看到了 Extendible-BBCode-Parser 這個JavaScript Library
結構上我覺得不錯
能有彈性的新增、修改標籤行為,也能確實處理好 nested BBCode
所以動手改寫了個 Java 的版本
目前調整到我覺得還可以的程度
改寫時我就只專注在我需要的部分,一些錯誤偵測我覺得沒必要就拿掉了
程式碼的長度覺得不適合整個貼上來,所以不貼code改貼程式碼 Github 連結
跟參考的library一樣開放隨意修改、發佈

之前我對於 regular expression 大概就是基礎使用的程度
程式裡的那些 pattern 我也沒懂到可以說出什麼詳細教學
一些處理細節也是邊刻邊體會,從這次經驗學到了些東西,感謝原 Project 提供的各種想法

留言

  1. 請問原始碼中有一段是Encoder.parseInt(subMatcher.group(2))

    想詢問是不是寫錯了?

    回覆刪除
    回覆
    1. 抱歉很久沒看blog留言,到現在才回覆
      你說的對,那是我的疏忽
      Encoder是我平常會用到的自行封裝的工具
      我公開時盡量拿掉非必要的code,這一句就是單純漏掉而已
      改用Integer.parseInt就可以了
      gist也會修正

      刪除

張貼留言