PHP – Converter string para maiúscula ou minúscula com acentos

Ao decorrer de um projeto precisei transformar strings em maiúsculas ou minúsculas conforme ocasião e para isso o PHP fornece as funções abaixo:

strtolower – Converte uma string para minúsculas
strtoupper – Converte uma string para maiúsculas
ucfirst – Converte para maiúscula o primeiro caractere de uma string
ucwords -Converte para maiúsculas o primeiro caractere de cada palavra

Porém nossa língua portuguesa existem as preciosidades dos acentos, na qual o PHP não consegue converter nativamente. Então resolvi fazer uma função para elas, veja:
// Função para transformar strings em Maiúscula ou Minúscula com acentos
// $palavra = a string propriamente dita
// $tp = tipo da conversão: 1 para maiúsculas e 0 para minúsculas
function convertem($term, $tp) {
if ($tp == "1") $palavra = strtr(strtoupper($term),"àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ","ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞß");
elseif ($tp == "0") $palavra = strtr(strtolower($term),"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞß","àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ");
return $palavra;
}

// Exemplo de Utilização - Maiúscula
$exemplo1 = "notícias";
echo convertem($exemplo1, 1);

// Exemplo de Utilização - Minúscula
$exemplo2 = "NOTÍCIAS";
echo convertem($exemplo2, 0);

Bom, agora com esta função já da pra converter/transformar qualquer string que tenha caracteres acentuados em maiúscula ou minúscula. E não se esqueça, o seu comentário é o meu pagamento para continuar publicando minhas dicas e côdigos. ;)

71 comments

  1. Olhaaaaaa, esse codigo me ajudou muito viu… ficava muito feio converter strings e perder o acento com isso…
    parabens.. =]

  2. já ouviu falar que esta função superou este impecilho em uma nova versão do php (não sei a partir de qual)… mas não tenho certeza quanto a isso… vou pesquisar

  3. Muito legal! Valeu. Consegui resolver rapidamente os títulos de um site em Joomla!

    title),”àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ”,”ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞß”);?>

    Obrigado.

  4. Diogão,

    como atribui um valor NULL a uma variavel?
    $variavel = NULL; não deu aqui.

  5. Muito obrigado mesmo, estava com problemas com a função do php, mas acho que no servidor ok, pois no meu apache funcionou perfeitamente e quando upava a página nao funcionava, mas agora com sua ajuda ficou tudo ok?abraços!

  6. Muito obrigada.
    Funcionou perfeitamente para o que queria.

    Abraço.

  7. Bah, bem certinho. esta fazendo parte da minha coleção de funçoes

  8. Testei o seu código mas a conversão para minúsculas não funcionou.
    Gostaria que esclarecesse para mim essa questão.

  9. Camarada, precisei desta informação e achei aqui. Muito legal esse código. Parabéns!!!
    Deus continue te dando sabedoria para postar mais código bacana.

    Um abraço.

  10. Cara vc é o cara eu to começando a aprender ajax, com php, com postgresql, html, css, xml, e mais um monte de letrinahs dessa sopa de letrinhas que é nossa profissão rsrsrs

    perfeito cara muito obrigado e parabéns mesmo pelo seu conhecimento e por sua boa vontade em ajudar quem tá querendo ganhar dinheiro,dogo, quero dizer aprender rsrsrsrs.

  11. Cara, você salvou minha pele na construção de alguns lançamentos contábeis automáticos que estava fazendo, os contadores normalmente não gostam de letras minúsculas nos lançamentos.

    Obrigado

  12. Gente para passar strings acentuadas para maiuscula é só setar o locale com a função setlocale() do php, da seguinte forma:
    setlocale(LC_CTYPE, “ptb”,”BR”);
    assim quando vc usar strtoupper() vai funcionar.
    ok.

  13. VLw kra show de bolaaaa… veio a calhar esse script aew!!!

    vlw brother!!

  14. O código é bom, mas você não preve palavras que iniciam com acento. Por exemplo Índio. Vale uma atualização, ai vai ficar redondo! Abraço!

  15. Estou terminando meu projeto de conclusão de curso agora e o sistema de buscas do projeto funcionava apenas se digitassem a palavra exatamente como estava no banco de dados, com este seu tutorial consegui fazer um sistema de buscas funcional e esperto, muito obrigado!

  16. José Eduardo :
    Estou terminando meu projeto de conclusão de curso agora e o sistema de buscas do projeto funcionava apenas se digitassem a palavra exatamente como estava no banco de dados, com este seu tutorial consegui fazer um sistema de buscas funcional e esperto, muito obrigado!

    Use o LIKE em suas frases SQL

  17. tomei a liberdade e inclui na função a colocação da 1 letra de cada palavra como maiúscula.

    function convertem($term, $tp) {
    $a1=”àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ”;
    $b1=”ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞß”;
    if ($tp == “1”) $palavra = strtr(strtoupper($term),$a1,$b1);
    elseif ($tp == “0”) $palavra = strtr(strtolower($term),$b1,$a1);
    elseif ($tp == “2”) $palavra = htmlentities(mb_convert_case($term, MB_CASE_TITLE, “ISO-8859-1”));

    //elseif ($tp == “2”) $palavra = ucwords(strtolower($term));
    return $palavra;
    }

    // Exemplo de Utilização – Maiúscula
    $exemplo1 = “notícias”;
    echo convertem($exemplo1, 1).””;

    // Exemplo de Utilização – Minúscula
    $exemplo2 = “NOTÍCIAS”;
    echo convertem($exemplo2, 0).””;

    // Exemplo de Utilização – Minúscula 1\letra
    $exemplo2 = “NOTÍCIAS ÁULA”;
    echo convertem($exemplo2, 2).””;
    ?>

  18. Marcio Okabe :
    Muito legal! Valeu. Consegui resolver rapidamente os títulos de um site em Joomla!
    title),”àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ”,”ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞß”);?>
    Obrigado.

  19. Puta brother, muito bom… quando resolvo pesquisar alguma coisa bem explicada ou ainda melhor, pronta pra se usar nas coisas mais comuns, caio aqui e saio satisfeito, obrigado.
    abç

  20. Muito obrigado amigo, era exatemente o que eu estava precisando.

    Toda vez que eu inseria palavras acentuadas no meu bd, acontecia isso: ÓTIMO ficava óTIMO. Você ajudou muito.

  21. O PHP 5 TEM UMA FUNÇÃO QUE JÁ CONVERTE COM A ACENTUAÇÃO:

    mb_strtoupper($str);

    Olhem mais detalhes no manual do Php.

  22. function acento($string,$tamanho){
    mb_internal_encoding(“UTF-8”);
    if($tamanho == ‘UPPER’) mb_strtoupper($string);
    elseif ($tamanho == ‘LOWER’) mb_strtolower($string);
    return $string;
    }

    $exemplo1 = “notícias”;
    echo acento($exemplo1, ‘UPPER’) . PHP_EOL;

    $exemplo2 = “NOTÍCIAS”;
    echo acento($exemplo2, ‘LOWER’) . PHP_EOL;

  23. Olá vlw e mto obrigado pelo post me ajudou mto tinha mais de 5000 registros no banco pensei que iria ter que alterar 1 a 1 rsrsrsrsrs

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.