Problemas em acentos
Escrito por
Edgar Serra em 22 de Novembro de 2009 às 21:08.
Arquivado em PHP Dicas.
Como todos devem saber o PHP depende muito do modo como o servidor é configurado. Boa parte dos servidores que usamos estão em outros países e por via de regra, temos alguns problemas quando trabalhos com conversão de caracteres de minúsculo para maiúsculo e vice-versa.
Esse problema se deve as configurações do servidor, que podem não estar setadas para pt_BR/portuguese, nesse caso tendo problemas principalmente com letras acentuadas, nesse caso você tem duas opções basicamente:
1 - Usar
Funções Multibyte String, essa solução é perfeita, mas tem limitações, imagine que você deseja converter: "ÓLEO, ATENÇÃO" para "Óleo, atenção", se você usar strtolower e depois ucfirst, nosso exemplo vai se transformar em "Óleo, atenÇÃo", você pode substituir strtolower por mb_strtolower, nesse caso será impresso: "óleo, atenção", não existe 'substituto' para ucfirst, nesse caso você ficaria de mãos amarradas e teria que ir para a segunda opção;
2 - Usar o
setlocale, como o que nos interessa é apenas a parte de alfabeto, nos interessa o LC_CTYPE, para resolver o problema que foi posto acima bastaria:
setlocale(LC_CTYPE,pt_BR);
Pronto! Note que você está definindo que o servidor DEVE usar a classificação de caracteres e conversão como Português do Brasil (pt_BR), opcionalmente você pode trocar pt_BR por portuguese que também é válido.
No caso da segunda opção, nem é necessário usar mb_strtolower, por strtolower funcionará perfeitamente. Note que não é recomendando você usar:
setlocale(LC_ALL,pt_BR);
Pois alterações futuras no PHP podem trazer efeitos não desejáveis para o seu script.