d13slideshow圖文輪播外掛內文輸出亂碼解決辦法

作者 炮爺 - 發布 2010-02-28 14:46 - 更新 2010-02-28 14:57 - 閱讀 276 人次 (參考值)

昨天我熬夜了,整整一晚沒睡,到早上我決定倒下,讓我的主機商替我想想辦法。我的問題不在於內文輸出亂碼,而是在於PHP函數有時讀取圖片會出錯,造成頁面上出現錯誤字串,很不美觀,只有幾張圖片會讀取錯誤,真的很詭異。

因為這問題我找了WordPress所有的圖片輪播外掛,但許多都因為導航bar使用jQuery而產生衝突,怎麼辦,不能怎麼辦,小的沒學過什麼JS,更不懂要如何解決衝突,只好再將希望放回d13slideshow。

d13slideshow是一款免費的Wordpress圖文輪播外掛,可以放於側邊欄、首頁等任何頁面,如有需要可看一下我的介紹文「D13Slideshow圖片展示文章外掛(附延伸使用)」。我現在可以說它與其它外掛的兼容性是最高的了,不想讓部落格太單調,或是想多點豐富感的朋友,請用上它吧。

中文亂碼

除了有時圖片讀取會出錯 (可能是我個人狀況),還有另外一個問題,就是文章摘要會造成最後字元亂碼,不管你在後台設定只要輸出多少字節都會造成最後字元被截斷。原因不外乎外國人用英文,沒有字節問題,所有英文都是單字節,但幾乎所有英文外的語言都不是單字節,包括繁簡中、日語、韓文等。

substr問題

有了字節問題的想法後,我知道大概是PHP函數的關係,於是我的第一個直覺反應是「Google」,中文用戶群那麼龐大,怎麼可能只有我會被這問題所惱,應該隨便Google一下都可以找到問題。

我開啟了d13slideshow的外掛文件,唯一的一個「d13slideshow.php」檔,只有一個文件就支援所有運作,真的很讚,就是喜歡這種外掛。在裡面找到了字串擷取的式子「echo substr($d13ss_ex,0,get_option('d13ss_exceprtLength'));」,就是這一串。

我上網搜尋了關鍵字「中文 亂碼 substr」,這招真的屢試不爽,關鍵字找問題就是方便,搜尋引擎真棒。於是我看到了主流的兩個解決方案1.增強substr判斷,但這會將代碼多增加好幾行2.使用mb_substr解決,這比較簡單,我選擇先用它試試。

解決辦法

「echo substr($d13ss_ex,0,get_option('d13ss_exceprtLength'));」改成「echo mb_substr($d13ss_ex,0,get_option('d13ss_exceprtLength'),'utf-8');」即可解決,修改完畢後記得上傳儲存。

第二個式子比上一個式子多了兩個東西,一個是「mb_」,另一個是「,'utf-8'」。ok,問題就在於為什麼是mb_,還有什麼是mb_函數。若是不想改的下載我的版本吧,上傳即可安裝,但是官方升級後記得自己用上方所說的自己改一下。

外掛名稱:d13slideshow(fix UTF-8)

外掛下載:Download

mb_函數說明

網路上找了很多資料,但似乎沒有人對於mb_這個東西做解釋,這只有兩個可能1.這東西只要可以用就好了,彼此心照不宣,不必多說2.這東西太簡單了,我應該不用說你也懂吧。這兩個結論都讓我這PHP新手相當無法接受,於是我只能翻翻英文的PHP函數代碼解釋大全。終於讓我找到mb_的意思和作用。

Multibyte,多字節,取其兩個單字頭一個字即是mb縮寫。mb_就是多字節用的一系列PHP函數,這應該是對非英語系國家的解決辦法吧,這個函數支援所有非ASCll編碼的使用,就是專門為了截斷亂碼、等問題所出現的。

mb_函數於擷取「字元」,而非字節,使用mb以後所有英文都算一個字元,每個中文語言等也都是一個字元,以字元擷取就不會造成亂碼問題了。但有一點必須注意,就是原先的後台如果設定輸出110字節,現在會變成輸出110字元,實際差異就是,前者只會輸出55中文字左右,後者會照實輸出你所設定的字串。

英文介紹:Multibyte String Functions

《 3 個回應 》

  1. 茶V 說 ..

    請問砲爺,我也想學PHP,不過懂一點HTML而PHP卻都沒學過,不知道你有沒有覺得哪一本基礎的PHP教學書可以推薦的?
    ____『PHP + MySQL 快速入門』松崗│吳弘凱____請問這本砲爺可以嗎?好像滿多人說不錯的,麻煩你解惑的,感謝。

    [回應]

    炮爺 回應:

    抱歉喔,我也對PHP不熟
    但如果確定對PHP有需求
    可以去電腦補習班學些基本、進階觀念
    (請人教或是網路自修也都可以,網路資源多)
    有基礎後自己也會知道怎麼挑需要的書
    書局的書都可以翻翻看啊
    如果不知道書的內容不建議線上購買
    買一本符合自己的書才是重要的

    [回應]

  2. 事件 說 ..

    PHP的書可以參考歐萊禮的「PHP 5 學習手冊」
    我也才剛看不久,而且CSS也還沒看完XD

    [回應]

《 發表回應 》

網站小工具

Page Rank Web Analytics Join My Community at MyBloglog! Creative Commons License 網站小貼紙80*15
Add to Google Reader or HomepageSubscribe in BloglinesAdd to Plusmo