Há uma função em PHP que coloca uma string com todas as letras maiusculas. Hmmm… todas não, ela não consegue colocar os caracteres latinos (caracteres com acentos ou cedilha) em maiúsculas. Então resolvi escrever minha própria solução:
function upper ($str) {
$LATIN_UC_CHARS = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ";
$LATIN_LC_CHARS = "àáâãäåæçèéêëìíîïðñòóôõöøùúûüý";
$str = strtr ($str, $LATIN_LC_CHARS, $LATIN_UC_CHARS);
$str = strtoupper($str);
return $str;
}
Para isso, usei o a função strtr que me permite “traduzir” os caracteres, trocando-os pelos seus respectivos. Ou seja, troca o primeiro caracter do primeiro parametro pelo primeiro caractero do segundo parâmetro; troca o segundo do primeiro com o segundo do segundo; terceiro do primeiro com o terceiro do segundo; quarto do primeiro com quarto do segundo e assim por diante.
Deixo aí para vocês fazerem a versão inversa, ou seja, colocar em minúsculas.