Ser Programador

Como corrigir o problema com acentuação das funções strtolower e strtoupper no PHP

Neste artigo apresento as respectivas funções que vieram para corrigir o problema de suas predecessoras.


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