Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Debian + kde simples
Por flopes6
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Formantando nomes com caracteres especiais em PHP
Linux user
marciocm
23/02/2004
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.
Por: marcio
[ Hits: 20184 ]
Conceito: 10.0   2 voto(s)2 voto(s)2 voto(s)2 voto(s)2 voto(s) + quero dar nota ao artigo

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:

<?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






Páginas do artigo
   1. Introdução

Outros artigos deste autor
Nenhum artigo encontrado.

Leitura recomendada

Comentários
[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


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.