Web Based Editor

我想不出這篇要下怎麼樣的中文標題
反正就是,在網頁上用的編輯器

這邊不是要講什麼編輯器大評比之類的
只是隨便說說一些想法而已


= 資料儲存及顯示 =
其實比編輯器更重要的是,我們寫好存進資料庫的時候,用的是怎麼樣的格式?
日後顯示或編輯會不會有問題?
最基本的,放在DB的東西我們要用純文字或是直接用HTML格式?
空白字元需不需要不要轉nbsp?換行符號要不要先轉成br?
HTML特殊符號要不要處理?
如果要轉換,要在寫入db之前就轉或是要顯示的時候再轉?
如果寫入之前就轉,那讀出來編輯的時候又該再作那些還原?
這些事實上很多blog或cms系統都搞的不是很好
等下就拿樂多作例子來說一下吧

= wiki 語法 =
我還蠻習慣用wiki語法寫東西的
平常作筆記條列東西的時候也都用wiki的方式寫
原本我有自己的寫法,不過還是統一比較好些,後來就都用wiki的方式了

喔~我說的不是MediaWiki(維基百科用的那一套)
MediaWiki的語法實在太惱人了
類似dokuwiki、tiki的那種簡單乾淨的語法會好上許多

例如這樣是標題:

 = 這是標題1 =
== 這是標題2 ==

這樣是列表:

* list 1
* list 2
* indent

這樣是數字列表:

# list 1
# list 2
# indent

這樣就可以生出一個表格:

| name  | address | tel  |
| smith | matrix  | 0101 |

其它像是顏色、粗體、上下標之類也都有

用wiki好處是腦袋可以專心放在要寫的內容上,而不是去想版面的問題
純文字編輯也比較輕快
寫好的東西拉回來修改的時候也輕鬆

缺點呢,就是所謂wiki語法其實並沒有一個統一的標準
今天你用這語法寫好存進DB,以後要讀出來顯示就得都照原先的語法規則來處理才行

然後,大部份的blog都不會支援wiki語法
這東西在cms/wiki系統上才比較容易出現
甚至現在許多cms/wiki也都不搞這個了

= WYSIWYG =
然後來說說WYSIWYG,也就是所見即所得編輯器
這通常會比較貼近大部份使用者的習慣
現在網頁上在用的WYSIWYG也都作的相當不錯了
像是很多blog或是cms系統都會用的ckeditor
就算表格編輯也都不是什麼大問題

不過我總覺得WYSIWYG用起來不是那麼的舒服
畢竟這種東西是用利用innerHTML在網頁上硬幹作出來的
跟word之類的應用程式來比順暢感還是差很多
寫東西的時候還得小心不要混進奇怪的html,也是有點累人

這種這種編輯器存進DB的都是html
好處當然是不必擔心之後要顯示的時候還得作一次格式轉換
不過缺點就是
當你讀出來要再編輯的時候,如果你換了別的編輯器,甚至只是換別的瀏覽器
因為大家對innerHTML的處理方法都不同
很有可能沒法把東西正確的轉回來

= 樂多的問題 =
樂多的後台可以選擇編輯器要用純文字模式或WSYIWYG模式
* 純文字模式
這純文字模式其實並不是真的純文字
而是HTML的文字編輯器,存下的還是HTML內容
我就直說吧,這是最欠考慮的作法
首先,在使用時必需小心避開所有HTML的特殊字元
空白字元要自己打成nbsp才能縮排
另外br才是最大問題
如果你寫了一大篇文章,只是單純的想在文章最後加一個表格,或是附上一小段程式碼
所以需要用到table或pre的html tag
你必需把自動換行的功能關掉,才不會讓每一行html的部份都多加了br
可是這樣一來,前面文章的部份都不會換行了
當然,我們可以用一些奇怪的手段來解決,例如透過css把pre裏面的br設成display:none之類的
不過這本來就能處理好的東西,不應該搞成這樣的

* WSYIWYG模式
樂多現在用的是ckeditor/fckeditor
這編輯器算是不錯的東西,基本上用起來還好
除了自己需要插html tag的時候得在一團亂的html碼裏面找東西,不是很愉快就是了
不過他最大問題還是出在樂多DB資料處理上面
如果你當初是用純文字模式寫進DB(開啟自動換行)
現在想改用WSYIWYG編輯器讀出來要編輯
會發現換行符號全被吃掉了,整篇文章全搞成一團
怎麼辦?
只能為了編輯舊文章先去系統設定改回純文字編輯器
要編輯新文章又得換回WSYIWYG編輯器

像這些都是最基本應該要處理的東西
但在設計時如果沒有考慮到這樣的問題
很有可能後續也不一定能夠補救了

= 結論 =
沒有什麼結論,其實我根本不知道為什麼要打這一篇
可能只是樂多用起來並不是很舒服,所以就胡亂靠杯一下
如果說要搬家嘛…
其它的cms/blog也不見得符合需求
能自己寫一個當然是最好
不過應該也沒那個力氣吧
頂多就是拿現成的來改一改了

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *