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().
