Mayúsculas y minúsculas en PHP

Cuando contenido y diseño dependen de distinto personal suele haber pequeñas discrepancias a la hora de presentar información en una página web. Una de esas discrepancias suele ser por culpa de las mayúsculas. Hay muchos cargadores de datos que no se preocupan de si todo va en mayúsculas, minúsculas ó combinado (véase lenguaje sms).

A la hora de buscar una solución, como programador, he usado las funciones de php strtolower(), strtoupper() y ucfirst(), pero siempre con un pequeño problema en las vocales acentuadas, que no las reconoce como tal y, consecuentemente, no realiza el cambio:
<?php
  echo strtoupper("hola tío"); # HOLA TíO
  echo strtolower("hola TÍO"); # hola tÍo
  echo ucfirst(strtolower("hola TÍO")); # Hola tÍo
?>
Con esto quiero llegar a la solución perfecta (hasta la fecha), y es combinar el uso de las funciones anteriormente mencionadas con strstr(), obteniendo esta vez el resultado deseado:
<?php
  echo strtr(strtoupper("hola tío"), "àáâãäåæçèéêëìíîïðñòóôõöøùüú", "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ"); # HOLA TÍO
  echo strtr(strtolower("HOLA TÍO"), "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ", "àáâãäåæçèéêëìíîïðñòóôõöøùüú"); # hola tío
?>
Imagino que, como todo en esta vida, será mejorable metiéndonos con las variables language, etc... pero de momento me ha sacado del apuro.
developing php programacion

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.
  • Gracias por este apunte, me ha ido genial. PD: Cuanto tiempo sin pasar por aquí :-)
  • Espero que ayude, nunca esta demas tener estos apuntitos. Para cambiar las primeras letras a mayusculas : $nombres = "juan apablaza león";$nombres = ucwords(strtolower($nombres)); El resultante seria Juan Apablaza León Salu2
  • Tambien puedes utilizar el comando ucwords(hola) = Hola
  • Gracias,me resultó muy productivo.
  • Buena ayuda
  • Fabricio Matamoros y Paola de la Torre se Aman
  • Realmente ayuda, gracias por la sugerencia. Lo usé además para cambiar letras con tildes, para mayúsculas sin tilde.Ej.Imprime: XAYAZA
  • No hagas caso al slash
  • otra opcion es colocar la codificacion \"iso-8859-1\" en el charset, esto quedaria completo en la siguiente linea, la cual va situada entre .<meta "="" "content-type\"="" "text="" charset="iso-8859-1\" content="\" html;="" http-equiv="\">con esto funciona perfectamnetnte el primer ejemplo de esta pagina, es decir escribe bien los acentos y tilse de las ñ o Ñ.Saludos.
  • Fabrizzio M. y Paola M. Se Aman
  • erloquito, agradezco enormemente tu aporte. Con la solución que das, he resuelto un enorme problema.
  • La cosa se complica con acentos. Aquí teneis mi función para modificar nombres y apellidos para los formularios que necesitamos estos datos, y que el usuario, no le importa escribir si mayusculas, o minusculas. function changeName($name) { $name = strtr(strtolower($name), "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ", "àáâãäåæçèéêëìíîïðñòóôõöøùüú"); $name = explode(" ",$name); $name2 = array(); for($i=0;$i<count($name);$i++) ",$name2);="" $continuacio="mb_substr($name[$i]," $inicial="strtr(strtoupper(mb_substr($name[$i]," $name2[]="$inicial.$continuacio;" 0,="" 1)),"àáâãäåæçèéêëìíîïðñòóôõöøùüú","ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ");="" 1,="" implode("="" return="" strlen($name[$i])-1);="" {="" }=""></count($name);$i++)>
  • quisiera que me ayudan quiero la funcion que me haga convertir el texto en minuscula, mayuscula intercalado.gracias
  • Justo lo que andaba buscando, no me quedo del todo claro el code de raimon. Pero no me urge eso ahora xD
  • Gracias por el aporte compañero me sacastes un gran peso de encima saludos
  • Gracias muy buen apunte
  • COMO REALIZO LA FUNCIO QUE CUANDO PRECIONE EL BOTON DE GUARDAR UN REGISTRO O RELICE ALGUN CAMBIO GUARDE EL CAMPO EN MAYUSCULAS O CUANDO ESTE EN FUERA DE FOCO EL CAMPO REALICE EL CAMBIO. GRACIAS
  • muy buenos apuntes
  • Bendita codificación, problema tan cencillo de resolver, pero que puede dar dolores de cabeza; saludos shuberth chi balam. www.shuberth.net
  • El aporte de Erloquito era justamente lo que estaba buscando. El tema de acentos lo solucioné con str_replace ('é', 'e', $value) cuando son nombres de carpetas, archivos, etc.Para los nombres propios y otros datos que requieren mantener nombres uso
  • Muy bien,Excelente solución.
  • Excelente aporte, gracias.
  • Muy bueno, gracias
  • Me fue de ayuda gracias
  • Muy bueno!!!!! me ayudaste muchisimo, rápido y directo al grano
  • function get_tot_majuscules($cadena){ $cadena=mb_strtoupper($cadena, 'UTF-8'); return $cadena;}probar esto, pasa también los acentos. En éste caso es a mayúsculas
blog comments powered by Disqus