2011-05-11 9 views
24

He estado leyendo los comentarios de los usuarios sobre la función de strtoupper() PHP y no parece haber un consenso sobre cómo hacer la conversión para cadenas no enligés. Me refiero a que las personas ofrecen soluciones localizadas y esas cosas, pero ¿no debería haber una forma uniforme de convertir una cadena en todas las mayúsculas (o todas las letras inferiores)?strtoupper Función de PHP para cadena UTF-8

Así que mi pregunta es, por ejemplo, si tengo una cadena codificada en UTF-8 (en algún lugar desconocido) ¿cómo la convierto en letras mayúsculas/minúsculas en PHP?

Respuesta

48

Quiere usar mb_strtoupper.

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

PHP.net estados:

Por contraste con las funciones estándar de plegado caso tales como strtolower() y strtoupper(), caso de plegado es realizado sobre la base de las propiedades de carácter Unicode . Por lo tanto, el comportamiento de esta función no es afectado por la configuración regional y puede convertir cualquier carácter que tenga propiedad 'alfabética', como A-diéresis (Ä).

0

¿Has probado this? No soy lingüista, pero no asumiría que todos los idiomas tienen una división inferior/superior.

+1

para cada carácter. Por ejemplo, 'ß' no tiene mayúscula :) – KingCrunch

+0

cada idioma? ¿qué hay de chino o árabe? En árabe tienes una versión tres para cada personaje, no todos los personajes tienen la versión correspondiente en los tres grupos, en griego hay una letra que también tiene la versión inicial (es decir nuestra mayúscula) normal y final – rsk82

+0

@ rsk82 - Él dice con razón * no * asumiría eso. – arviman

1

uso mb_strtoupper($text) en lugar de strtoupper($text) :)

Al menos no
+1

¿Cómo es diferente de esta respuesta? http://stackoverflow.com/a/5969837/670017 – ahmd0

Cuestiones relacionadas