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.
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:
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
[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:
[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.
[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
---------------------------------------------------------------------------------------------------------