昨天我熬夜了,整整一晚沒睡,到早上我決定倒下,讓我的主機商替我想想辦法。我的問題不在於內文輸出亂碼,而是在於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中文字左右,後者會照實輸出你所設定的字串。













請問砲爺,我也想學PHP,不過懂一點HTML而PHP卻都沒學過,不知道你有沒有覺得哪一本基礎的PHP教學書可以推薦的?
____『PHP + MySQL 快速入門』松崗│吳弘凱____請問這本砲爺可以嗎?好像滿多人說不錯的,麻煩你解惑的,感謝。
[回應]
炮爺 回應:
三月 1st, 2010 at 02:17:39
抱歉喔,我也對PHP不熟
但如果確定對PHP有需求
可以去電腦補習班學些基本、進階觀念
(請人教或是網路自修也都可以,網路資源多)
有基礎後自己也會知道怎麼挑需要的書
書局的書都可以翻翻看啊
如果不知道書的內容不建議線上購買
買一本符合自己的書才是重要的
[回應]
PHP的書可以參考歐萊禮的「PHP 5 學習手冊」
我也才剛看不久,而且CSS也還沒看完XD
[回應]