向sanitize_title()堅決鬥爭到底!

簡單說一下來龍去脈,sanitize_title()是在WordPress系統中所大量使用的一個function,這個function用途,在於將各式各樣的資料,包括文章標題、分類名稱等,轉換成一個內部使用的欄位,比方說,把文章標題的內容,轉換成PostSlug之類的代稱,將post_title當中的資料,轉換成post_name,轉換過程包括將所有的大寫英文轉成小寫,去除不必要的標點符號以及將空白轉換成底線等。這個內部使用的代稱,主要應用在產生文章的網址上,比方說,如果你寫了一篇叫做Hello! World!的文章,便可以產生如http://example.com/2004/07/09/hello_world之類的網址。

在中文使用上,sanitize_title()有嚴重的問題,那就是在於無法處理中文,中文標題在處理之後只會得到空白字串,所以,如果當你在WordPress開啟了permalink功能的話,便可能因為這個函數無法正確處理中文,而造成一些問題。比方說在對岸的簡體「中文WordPress」計畫網站的〈文章分類中不支持中文〉這篇文章,當中所描述的問題,就是因此產生的。從WordPress五月份釋出1.2版以來,我嘗試了幾種作法,企圖產生中文相容的sanitize_title()處理結果,包括先把中文文字urlencode()處理過,還有很蠢的,用一個很大的迴圈,把所有的中文UTF-8字元代換成漢語拼音(註:最近發現,那個外掛程式會在某些PHP環境中,例如裝了turck-mmcache之後,就會爛掉)等。

Continue reading

WordPress中文化:中文網頁技術的技術性問題與社會性軟體的社會性問題

或許您已經知道了這則消息。下個週末(七月十一日)下午, 中研院自由軟體鑄造場(OSSF)計畫邀請我參加OSSF開發者交流工作坊活動,在台北市新生南路的咖啡實驗室,與gugod、Jedi一起講一些關於網誌工具的開發經驗,活動詳情以及報名方式,請參見自由軟體鑄造場網站。(基本上,這場活動同時也在邀請更多人在自由軟體鑄造場上,參與自由軟體開發專案,不過參與自由軟體專案,註冊成會員,可以換來咖啡卷一張,好像不是很誘人的樣子。)

我要講的題目是「WordPress中文化:中文網頁技術的技術性問題與社會性軟體的社會性問題」,將過去將近一年來做WordPress中文化的相關經驗,與遇到的各種狗屁倒灶、亂七八糟、烏魯木齊、有的沒有的問題,以盡可能有條理的方式,整理在我的講稿中,如果您也計畫進行那套網誌系統的中文化,希望能夠對您有些幫助,您也可以把中間的某些部份,當成網頁設計文件或當成故事來讀。您可以在此下載這份文件:

WordPress中文化:中文網頁技術的技術性問題與社會性軟體的社會性問題,為PDF文件,約1.1MB大小,請使用Adobe Acrobat等閱讀程式開啟。

補充:剛剛有人反應,加入會員,應該要提供一份超豪華涮涮鍋才對。

六月四日筆記

今天又(對,又)有人在這個小站上貼了援交廣告,而昨天則有人貼了一個某設計工作室的廣告,我在想有沒有必要開啟 WordPress 的留言審核功能,所有留言都必須要通過審核通過後,才會出現在網頁上。順道一提,Comment Moderation Plugin這個外掛程式看起來不錯,這個外掛程式可以在開啟了留言審核功能時,當有訪客發表了一篇留言,系統就會送一封電子郵件到訪客的信箱,郵件內容是一個網址,訪客點選網址後,其留言便可自動通過審核,簡單來說,就是一種自動的電子郵件審核機制。

今天我寫了一個 WordPress 外掛程式:「 WP 音樂播放器」,這個外掛已經放在中文 WordPress 專案網頁上了。基本作法來自Topic Icon這個外掛程式,透過在文章中插入幾個自訂欄位「音樂檔名」以及「歌曲名稱」,就會自動在文章上插入連結,或是將音樂檔案嵌入到頁面中,然後另外弄一個頁面,可以將整個資料庫中全部的相關欄位中的資料抓出,變成我之前所寫的一個小音樂播放器的介面。弄這個功能,就是不想繼續以原本的方式,手動維護原本的播放介面,改寫成 WP 外掛程式後,以後維護播放列表會比較簡單。功能雖然寫好了,不過要把舊的資料,稍微修改一下,需要花一點時間,這大概稍晚來弄。

接下來我可能會弄一個 PCHOME 新聞台匯入 WordPress 的小工具吧。

WordPress 中文 Permalink 的折衷方案

WordPress 提供將文章標題轉換成該篇文章網址的功能(使用sanitize_title),不過目前主要只能夠符合西方語文的使用,如果標題使用UTF-8編碼的中文文字,那麼在sanitize_title之後,中文就會變成一片空白。為了可以在 WP 中讓中文標題也可以轉換成 permalink ,我弄了一個小外掛程式(放在最近在弄的 WP 1.2 安裝包中),先將標題以 urlencode() 處理過,然後在繼續進行sanitize_title的轉換。

也就是說,如果您的標題是「WordPress 中文版」的話,之前只會轉出「wordpress」,而我修改後的 sanitize_title ,則可以轉換成「wordpress_e4b8ade69687e78988」。感覺似乎有些醜,不過我目前能夠做到的,就是這樣。

我覺得比較理想的作法,是可以將中文全部轉換成漢語拼音,比方說「WordPress 中文版」,可以轉換成「wordpress_zhong_wen_ban」,不知道這個作法能不能用。

昨天的安裝包測試版的安裝程式的錯誤修好了,今天放上去的測試版裡頭,我又放了一些外掛程式進去。玩玩看。

更正,安裝包測試版三個upgrade.php 第十一行的地方,一時不查多打了一個「ㄨ」,用測試版三時請把那個「ㄨ」刪掉。@_@

六月一日筆記

記下幾件事情。

國外在去年曾經舉辦一場的Blog接力賽(Blogathon),在今年也即將舉辦另外一場類似的活動,計畫名稱叫做「Project Blog」,活動將會在今年七月24日舉辦,屆時所有參與計畫的blogger,會在連續二十四小時內,每半小時更新一次網誌內容。這次的活動號稱是以慈善為目的,網站上說「in the name of each blogger’s favorite charity.」,以及「Project Blog is here because we care…」,不過我看沒看到究竟是什麼慈善用途,以及他們到底care的是什麼。

1.2 釋出後沒多久,WordPress 官方最近又發表了 1.3 版的開發方向:Multi-blog,以同一套 WP ,同時執行多個站台,感覺又是一個相當大的改版。我實在很好奇以目前這種直接改 index.php 硬幹的方法,要怎樣改成 Multi-blog 的設計,是像 Nucleus 那樣,每個 blog 分別使用一支 PHP 檔案當作首頁呢?還是像 pLog 那樣,走向以 Smarty 設計模板呢?目前還沒有很清楚的消息。

另外,我最近在做一個 WP 1.2 的中文安裝包,簡單來說,這個安裝包把 readme.html(讀我檔案)、install.php(安裝程式)、setup-config.php(用來設定wp-config.php的小工具)、import-*.php(從 MT 、Blogger等各種格式的資料匯入 WP 用的頁面),都做了翻譯,以及最新的正體中文語系檔,還有一大堆外掛程式(加上了中文說明)以及 CSS 樣式,全都打包成一塊。裝起來之後,裡頭就有 Style Switch 這個外掛程式,只要啟用外掛程式之後,就有一堆樣式可以選用了。感覺裡頭應該還有一些問題,所以我先丟出測試包,老樣子,檔案放在OpenFoundry的「中文 WordPress」專案頁面上。