Si en PHP queremos pasar un string con acentos, diéresis o diferentes letras de codificación UTF-8 a mayúsculas, no podemos utilizar:
$var = strtoupper($valor);
ya que transformará a mayúsculas únicamente las letras del abecedario simple (sin contar ñ, vocales acentuadas ni ç).
La forma correcta de cubrir todos los casos es:
$var = mb_strtoupper($valor,'utf-8');
texto extraído de: https://aleprieto.com.ar/php-problemas-de-strtoupper-con-acentos-n-dieresis-etc/