strtouppper, strtolower, ucwords y la codificación
15 de November, 2008. Escrito por [Q]boss en PHP + MySQL, Recursos
En un proyecto reciente del estudio, hemos tenido que lidiar con la conversión de cadenas a minúsculas, mayúsculas y a frases capitalizadas. El proyecto partía de un Excel en el que todos los datos venían en mayúsculas, y por razones tanto de diseño como de legibilidad decidimos capitalizar los nombres de empresas, sectores, etc.
En principio con PHP lo teníamos fácil, ya que trae unas cuantas funciones conocidas para convertir cadenas a minúsculas, mayúsculas e incluso a formato titular (Cada Letra De Cada Palabra En Mayúscula).
Los problemas llegan al hablar de ASCII extendido. Para empezar, nuestra base de datos estaba en UTF8_general_ci, con lo que algo como ESPAÑA viene a ser ESPAÄ'A o algo similar. Aquí os dejo una página en php clarificadora de lo que ocurre al tratar de lograr el objetivo de manera directa:
Nota: la página está guardada como UTF8, y tiene se charset en la correspondiente etiqueta HTML.
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
<html xmlns="http://www.w3.org/1999/xhtml">
-
<head>
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
<title>Test de Conversión de Cadenas en PHP</title>
-
</head>
-
-
<body>
-
<?php
-
-
$cadenaOriginal = "En EsPaÑA hAy MuchOs HIpÓcritas y PolíTicOS CoRruPtos";
-
-
// Arroja>> CADENA ORIGINAL: En EsPaÑA hAy MuchOs HIpÓcritas y PolíTicOS CoRruPtos
-
-
// Arroja>> EN ESPAÑA HAY MUCHOS HIPÓCRITAS Y POLíTICOS CORRUPTOS
-
-
// Arroja>> CADENA ORIGINAL: en espa�a hay muchos hip�critas y pol�ticos corruptos
-
-
// Arroja>> CADENA ORIGINAL: En Espa�a Hay Muchos Hip�critas Y Pol�ticos Corruptos
-
-
?>
-
</body>
-
</html>
Lo que muestra esto por pantalla bajo Firefox:

Ahora nos ponemos manos a la obra, porque parece claro que nos encontramos con varios problemas:
1) Los acentos en minúsculas no los convierte a mayúsculas
2) Los caracteres de ascii extendido los rompe al convertir a minúsculas con strtolower
3) Con ucwords, y dado que tira de strtolower, ocurre 3/4 de lo mismo
La solución, aqui está:
1. El breikendan: decodificar la cadena (utf8_decode)
2. El cruzaito: pasarla a minúsculas (strtolower)
3. El Maikel Yason: pasarla a capitalizado (ucwords)
4. El rabocop: codificarla de nuevo (utf8_encode).
Resumiendo
Y aqui os dejo un meneaito de ejemplo.Test Conversión en PHP
Comments
8 Responses to “strtouppper, strtolower, ucwords y la codificación”
Leave a Reply
Las cosas que hay que acabar haciendo por los clientes… Es que te estoy imaginando haciendo el baile mientras picas el script y me parto : D
XD
Que pasa hombre! Y esto no es nada… verás cuando vuelva el modelo de caja!!
Los programadores es que sois la leche!
.laprimeraenmayusculas {
text-transform: capitalize;
}
X-D
La pena es que en flash ese CSS no funciona
Pues no uses Flash, te lo tengo dicho. X-D
Cuando me digas una manera mejor de hacer un CD interactivo, con video, posibilidad de impresión de fichas con un formato bastante más elaborado que un miserable HTML, etc. Pues entonces me lo pensaré.
Saludos!
¿Y no les vale un gif animado en vez del video? 8-P
La vista me juega malas pasadas. Juro que la primera vez que miré rápidamente el título del post, entendí esto:
http://www.schwimmerlegal.com/stormtroopers.jpg