Una de las cosas con las que nos tenemos que pelear muchas veces es el tema de la codificación de caracteres, generalmente esto lo solucionamos con el utf8_encode o el utf8_decode, pero en algún caso puede suceder que nos sirva pero que nos salgan resultados no deseados. Pongamos el caso siguiente, tenemos en la base de datos el nombre y apellidos de un cliente y lo tenemos en mayúsculas, y queremos recuperar ese dato para mostrarlo y lo queremos mostrar capitalizado, para realizar esto haríamos lo siguiente:
$string = "RUBÉN YAGÜE ESPAÑA"; $string = ucwords(strtolower(utf8_encode($string))); echo $string; // Mostraria RubÈn YagÜe EspaÑa
Seguramente si nos vemos en este escenario lo mas rápido seria optar por mostrarlo todo en mayúsculas y ya, pero existe una manera de hacerlo bien.
Buscando por las funciones de PHP he encontrado las funciones mb_* las cuales nos van a ayudar a conseguir nuestro objetivo.
A continuación pongo la función que me he creado para realizar esto
function capitalize($string) { if (mb_detect_encoding($string) === 'UTF-8') { $string = mb_convert_case(utf8_encode($string), MB_CASE_TITLE, 'UTF-8'); } else { $string = mb_convert_case($string, MB_CASE_TITLE, 'UTF-8'); } return $string; }
Esta función me detecta si la codificación de la cadena es UTF-8, si lo es utilizando la función
mb_conver_case y codificando la cadena con utf8_encode nos creara la cadena final capitalizada
correctamente.