2010-01-15 60 views
3

我使用mb_substr函數來切分帶有變音符號的unicode字符串,但它的工作原理與我使用簡單的substr函數一樣。它將unicode字符分成一半顯示問題標記的鑽石。有關變音符號和mb_substr的問題

E.g.

什麼可能是錯誤的?

回答

6

如果我沒有指定編碼作爲mb_substr的最後一個參數,我有同樣的問題:它至少在我的服務器上默認爲ISO-8859-1


但是,如果我正確設置編碼,以UTF-8,它的工作原理確定:

echo mb_substr('ááááá', 0, 5, 'UTF-8'); 

獲取在瀏覽器中正確顯示:

ááááá 


mb_substr(報價,重點是我的)

string mb_substr (string $str , int $start [, 
    int $length [, string $encoding ]]) 

encoding參數是 的字符編碼。 如果省略了 ,則將使用內部字符 編碼值

+1

可以在php.ini中更改內部字符編碼(如果無法在系統範圍內更改,則甚至可以通過ini_set())。我認爲這是一個更明智的選擇(並且會選擇單字節默認編碼用於專用多字節功能的白癡)。 – Kornel 2010-01-15 12:30:52

1

我有同樣的問題,上面的答案也幫助我。除了設置php.ini或使用ini_set(),它也可能有助於使用mb_internal_encoding('utf-8');utf-8可能會在您選擇替換)設置多字節函數的永久編碼。