2011-05-11 36 views
24

我一直在閱讀用戶評論對用strtoupper()PHP函數,有似乎並不如何做非Enlgish字符串轉換共識。我的意思是人們提供本地化的解決方案和東西,但是不應該有統一的方式將字符串轉換爲全部上面的(或全部下面的)大小寫字母嗎?strtoupper PHP函數爲UTF-8字符串

所以我的問題是,比方說,如果我有一個UTF-8編碼的字符串(在某些未知區域)我怎麼把它轉換到PHP所有的上/下的信嗎?

回答

48

你想用mb_strtoupper

$str = "Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός"; 
$str = mb_strtoupper($str, "UTF-8"); 
echo $str; // Prints ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ, ΔΡΑΣΚΕΛΊΖΕΙ ΥΠΈΡ ΝΩΘΡΟΎ ΚΥΝΌΣ 

PHP.net狀態:

相反到標準情況下 摺疊功能,諸如用strtolower() 和strtoupper(),殼體摺疊是Unicode 字符屬性的基礎上執行 。因此,這個功能的 行爲是不受區域設置 ,它可以轉換 有 「字母」屬性的任何字符,如 A-元音(A)。

0

您試過this?我不是語言學家,但我不會認爲所有語言都有較低/大寫的分割。

+1

至少不是每個字符。例如'ß'沒有大寫:)每種語言都有 – KingCrunch

+0

?中國人或阿拉伯人呢?在阿拉伯語中,你有三個版本,每個字符,而不是所有的字符在所有三組對應的版本,在希臘語中是具有同樣最初一個字母(也就是我們的大寫)正常和最終版本 – rsk82

+0

@ rsk82 - 他正確地說,他*不會*假設如此。 – arviman

1

使用mb_strtoupper($text)代替strtoupper($text) :)

+1

與此答案有何不同? http://stackoverflow.com/a/5969837/670017 – ahmd0