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.
code php

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.