texto extraído de: http://blog.controlzeta.net/?p=427
Si en PHP queremos pasar un String con acentos, diéresis o diferentes letras de codificación UTF-8 a mayúsculas, directamente no podemos utilizar:
$var = strtoupper($valor);
ya que transformará a mayúsculas únicamente las letras del abecedario simple (sin contar ñ ni ç).
La forma correcta de cubrir todos los casos es:
$var = mb_strtoupper($valor,'utf-8');