Quando estamos trabalhando com funções que alteram o "case" das letras, é muito comum descobrirmos que as funções strtolower e strtoupper não funcionam corretamente com caracteres que tem acentuação.
Para a nossa alegria, existem duas outras funções que trabalham com um segundo parâmetro pelo qual podemos setar o charset que queremos utilizar.
Sem mais delongas, vamos ao exemplo:
<?php $strUpper = 'COMBINAÇÃO PERFEITA!'; $strLower = 'combinação perfeita!'; echo strtolower($strUpper); echo '
'; echo strtoupper($strLower);
O exemplo acima irá apresentar:
combinaÇÃo perfeita! COMBINAçãO PERFEITA!
Diante deste problema, existem as funções mb_strtolower e mb_strtoupper que vieram para corrigir esse problema:
<?php $strUpper = 'COMBINAÇÃO PERFEITA!'; $strLower = 'combinação perfeita!'; echo mb_strtolower($strUpper, 'UTF-8'); echo '
'; echo mb_strtoupper($strLower, 'UTF-8');
O exemplo acima irá apresentar corretamente a acentuação, como a seguir:
combinação perfeita! COMBINAÇÃO PERFEITA!
O segundo parâmetro pelo qual informamos o charset correto, pode ser omitido. Neste caso a função irá utilzar como default o chartset retornado pela função mb_internal_encoding().