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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 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. ;)

48 Responses to “PHP – Converter string para maiúscula ou minúscula com acentos”

  1. CAROLINE Says:

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

  2. guilherme Says:

    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. Nota 10 !!! Caiu como uma luva para o que eu queria.

  5. usei isso! :D

  6. Valeu pela dica brother… Foi muito útil

    [ =

  7. Amém

  8. Deus lhe abençoe, me ajudou também
    eu te amo

  9. Perfeito cara! Ajudou demais. :D

  10. Diogão,

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

  11. muito bom, funcionou perfeitamente.

    abraço.

  12. Parabéns, muito bom mesmo.

  13. José Vicente Says:

    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!

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

    Abraço.

  15. Valeu cara, era exatamente o que precisava para preenchimento correto das minhas fichas de inscrições do Vestibular.

    Abraços.

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

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

  18. 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.

  19. Eaiii vlw cara muito bom mesmo a função de grande utilidade.

  20. mucho bom.

  21. 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.

  22. 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

  23. william lopes Says:

    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.

  24. Me ajudou muito. Valeu.

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

    vlw brother!!

  26. Javascript e MySql não funciona, mas sua função sim. Muito obrigado.

  27. MT bom. Deu mt jeito. Parabéns

  28. Ótima solução, resolveu o meu problema.

  29. Muito bom mesmo cara, me ajudou, parabens!!

    Felipe Fulanetto

  30. Entao continue publicando!
    Otimo post!

  31. 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!

  32. Muito obrigado.

  33. 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!

  34. me ajudou vlw mesmo obrigado !!!

  35. Thanks for the article. I thought it was awesome.

  36. Ivan, funciona com qualquer palavra, sendo o acento no inicio, meio ou fim da palavra.

  37. Jose Eduardo, voce sempre registra dominios nacionais no Registro.br. Para dominios internacionais (.com .net .org .. etc.) voce pode utilizar o Brasil Registros.

    Os dominios informados ja estao registrado, espero que voce tenha conseguido registrar a tempo. :)

  38. 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

  39. 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).”";
    ?>

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

  41. 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ç

  42. 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.

  43. Ricardo Câmara Says:

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

    mb_strtoupper($str);

    Olhem mais detalhes no manual do Php.

  44. João Paulo Says:

    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;

  45. Beleza João! Isso ae, o PHP nas versões mais atuais ja deu a solução para o problema.

  46. 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

  47. Muito obrigado cara me ajudou bastante!!!

  48. Joaz Soares Says:

    Valeu João!! Era justamente o que precisavamos!

Leave a Reply