Pular para o conteúdo

Formantando nomes com caracteres especiais em PHP

Este artigo trata de uma coisa bem peculiar, que é a formatação de nomes com caracteres especiais. Por exemplo, o nome MÁRCIO quando passado por essa função vai gerar um retorno Márcio, isso é bem útil quando se está importando dados ou até mesmo criando formulários de cadastro.
marcio marciocm
Hits: 29.760 Categoria: PHP Subcategoria: Avançado
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Introdução

A principio vocês podem pensar que é fácil formatar um nome. Vou explicar por miúdos como seria.

Pegue a variável que vem como maiúscula para a função e dê um strtolower() nela, ficando tudo minúsculo, depois de um explode() nessa variável, separando-a por espaços e dê um ucfirst() em cada uma dessas palavras separadas.

E aquelas que tem que ficar maiúsculas? Por exemplo, o "de", "da", "o", "a", tipo "Márcio de Carvalho", reparem que o "de" não pode ser maiúsculo, logo faremos um if dentro desta função colocando tudo que não pode ser alterado de minúsculo para maiúsculo, mas tem também os que não podem ficar minúsculos, que são os algarismos romanos, logo temos que fazer esta verificação para eles também.

Trocando em miúdos, a função strtolower() nativa do PHP não torna minúsculas as palavras que contém caracteres especiais, portanto a palavra "MÁRCIO" ficaria "mÁrcio" se déssemos um strtolower() nela.

Escrevi este artigo para satisfazer os brasileiros que querem usar uma função para formatar nomes.

Segue abaixo as funções utilizadas, a primeira realiza apenas substituições de caracteres "Á" para "á" e a segunda é a função propriamente dita que formata o nome:

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
<?php
function troca_caracter_especial($var)
{
   $vetor_troca['Á']='á';
   $vetor_troca['À']='à';
   $vetor_troca['Â']='â';
   $vetor_troca['Ã']='ã';
   $vetor_troca['É']='é';
   $vetor_troca['È']='è';
   $vetor_troca['Ê']='ê';
   $vetor_troca['Í']='í';
   $vetor_troca['Ì']='ì';
   $vetor_troca['Î']='î';
   $vetor_troca['Ó']='ó';
   $vetor_troca['Ò']='ò';  
   $vetor_troca['Ô']='ô';
   $vetor_troca['Õ']='õ';
   $vetor_troca['Ú']='ú';
   $vetor_troca['Ù']='ù';  
   $vetor_troca['Û']='û';
   $vetor_troca['Ç']='ç';

   if( array_key_exists( $var,$vetor_troca ) ):
     return($vetor_troca["$var"]);
   else:
     return($var);  
   endif;        
}

function formata_nome($var)
{
   // Dá um lowercase() na variável toda
   $var = strtolower($var);
   $var2 = '';

   for( $j=0;$j<strlen($var);$j++ ):
     $var2 .= troca_caracter_especial($var[$j]);
   endfor;

   $var = $var2;
   $tmp = explode(" ",$var);
   $knome = "";

   for($i=0;$i<count($tmp);$i++):
     if (($tmp[$i]=='e') or ($tmp[$i] == "de") or ($tmp[$i] == "da") or ($tmp[$i] == "do") or ($tmp[$i] == "di") or ($tmp[$i] == "dos") or ($tmp[$i]=="ii") or ($tmp[$i]=="iii") or ($tmp[$i]=="vi") or ($tmp[$i]=="iv") or ($tmp[$i]=="ix") or ($tmp[$i]=="xx")):
        $compara = strtoupper($tmp[$i]);

        if (($compara=="II") or ($compara=="III") or ($compara=="VI") or ($compara=="IV") or ($compara=="IX") or ($compara=="XX")):
           $knome_upper = strtoupper($tmp[$i]);
           $knome .= " ".$knome_upper;
        else:
           $knome .= " ".$tmp[$i];
        endif;
     else:
        $knome_upper = ucfirst($tmp[$i]);
        $knome .= " ".$knome_upper;
     endif;
   endfor;

   $knome = trim($knome);
   return($knome);
}
?>

Bom, é isso! Qualquer dúvida me mandem um email ou ICQ: diretor@mnw.com.br
ICQ: 59081986


O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução
Nenhum artigo encontrado.

Prado - Orientação a componentes em PHP

PEAR - Utilizando classes prontas e documentadas no PHP

Inteligência Artificial com PHP e MySQL (parte I)

Google Chart: Criando gráficos dinâmicos em minutos

Capturando conteúdo de sites em PHP

#1 Comentário enviado por fabio em 23/02/2004 - 15:32h
Olá Márcio, funcção muito útil, parabéns! Agora veja se a função array_search() ajuda a tornar seu código mais limpo. Ao invés de usarmos vários OR no if, veja se isso ajuda:

$lista = array("e", "de", "da", "do", "di", "dos", "ii", "iii", "vi", "iv", "ix", "xx");
if (array_search($tmp[$i], $lista)) {
...
}

[]'s
#2 Comentário enviado por marciocm em 25/02/2004 - 18:51h
mais tarde farei um upgrade nela, tipo eu fiz isso em 15 minutos para entregar um sistema num cliente, já colquei isso numa classe bem mais estruturado, irei postar tambem futuramente uma classe que fiz para upload de arquivos, bem simples e facil de usar.
#3 Comentário enviado por jeffestanislau em 26/02/2004 - 18:53h
muito interssante, vou fazer uns testes!!!
#4 Comentário enviado por lalinden em 10/07/2009 - 19:23h

Segue abaixo uma codificacao mais atualizada que faz a mesma coisa mais rapidamente
---------------------------------------------------------------------------------------------------------

function trocaAcento( $string )
{
$search = array( 'Á', 'À', 'Ã', 'É', 'Ê', 'Í', 'Ó', 'Õ', 'Ú', 'Ç' );
$replace = array( 'á', 'à', 'ã', 'é', 'ê', 'í', 'ó', 'õ', 'ú', 'ç' );

return str_replace($search, $replace, $string);
}

function formata_nome( $str )
{
$vp = array( "a", "i", "e", "de", "da", "do", "di", "dos", "ii", "iii", "vi", "iv");

$knome = "";

$tmp = explode(" ", strtolower( $this->trocaAcento( $str ) ));

foreach( $tmp as $word )
{
$knome .= " ".(in_array($word, $vp) ? $word : ucfirst( $word ));
}

return trim($knome);
}

Contribuir com comentário

Entre na sua conta para comentar.