2011-05-11 9 views
24

Czytałem komentarze użytkowników dla funkcji PHP strtoupper() i nie wydaje się, aby konsensus co do tego, jak wykonać konwersję dla łańcuchów innych niż Enlgish. Mam na myśli, że ludzie oferują zlokalizowane rozwiązania i takie tam, ale czy nie powinien istnieć jednolity sposób konwersji ciągu na wszystkie górne (lub wszystkie niższe) litery?Funkcja PHP strtoupper dla ciągu znaków UTF-8

Moje pytanie brzmi, czy mam kod zakodowany w UTF-8 (w nieznanym języku), w jaki sposób mogę go przekonwertować na wszystkie wyższe/niższe litery w PHP?

Odpowiedz

48

Chcesz użyć mb_strtoupper.

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

PHP.net stany:

W przeciwieństwie do standardowych przypadek funkcji składania takich jak strtolower() i strtoupper(), sprawa składany jest przeprowadzono na podstawie właściwości znaków Unicode . W związku z tym zachowanie tej funkcji nie jest zależne od ustawień regionalnych i można je przekształcić w dowolne znaki mające własność "alfabetyczną" , taką jak A-umlaut (Ę).

0

Wypróbowałeś this? Nie jestem językoznawcą, ale nie zakładam, że wszystkie języki mają podział na małe i duże litery.

+1

Przynajmniej nie dla każdego znaku. Na przykład 'ß' nie ma wielkich liter :) – KingCrunch

+0

każdy język? a co z chińskim lub arabskim. W języku arabskim masz trzy wersje dla każdej postaci, nie wszystkie postacie mają odpowiednią wersję we wszystkich trzech grupach, w języku greckim jest jedna litera, która ma również początkową (to jest nasza wielka litera) normalna i końcowa wersja – rsk82

+0

@ rsk82 - Słusznie mówi, że * nie * tak by przypuszczać. – arviman

1

użycie mb_strtoupper($text) zamiast strtoupper($text) :)

+1

Jak to się różni od tej odpowiedzi? http://stackoverflow.com/a/5969837/670017 – ahmd0

Powiązane problemy