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.
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:
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);
}
?>
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
$lista = array("e", "de", "da", "do", "di", "dos", "ii", "iii", "vi", "iv", "ix", "xx");
if (array_search($tmp[$i], $lista)) {
...
}
[]'s