Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eai pessoal!
Gostaria de tratar um texto/palavra dessa maneira: Transformar em minúsculo, remover acentuações (trocar pelo caracter correspondente - minúsculo e maiúsculo) e espaços em branco por -(hífen) ou +(mais)
Alguém tem ou pode indicar um artigo/tutorial sobre alguma expreção regular que faça isso?
Encontrei algumas funções que fazem isso mas os caracteres em maiúsculo com acento não são tratados...
Agradeço!
<?php
/**
* Verifica se uma string é UTF-8
* @param string $string A string que será verificada
* @return boolean
*/
function is_utf8( $string ){
return preg_match( '%^(?:
[\x09\x0A\x0D\x20-\x7E]
| [\xC2-\xDF][\x80-\xBF]
| \xE0[\xA0-\xBF][\x80-\xBF]
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}
| \xED[\x80-\x9F][\x80-\xBF]
| \xF0[\x90-\xBF][\x80-\xBF]{2}
| [\xF1-\xF3][\x80-\xBF]{3}
| \xF4[\x80-\x8F][\x80-\xBF]{2}
)*$%xs',
$string
);
}
/**
* Remove os acentos de uma string
* @param string $string
* @return string
*/
function removeAccents( $string ){
return preg_replace(
array(
//Maiúsculos
'/\xc3[\x80-\x85]/',
'/\xc3\x87/',
'/\xc3[\x88-\x8b]/',
'/\xc3[\x8c-\x8f]/',
'/\xc3([\x92-\x96]|\x98)/',
'/\xc3[\x99-\x9c]/',
//Minúsculos
'/\xc3[\xa0-\xa5]/',
'/\xc3\xa7/',
'/\xc3[\xa8-\xab]/',
'/\xc3[\xac-\xaf]/',
'/\xc3([\xb2-\xb6]|\xb8)/',
'/\xc3[\xb9-\xbc]/',
),
str_split( 'ACEIOUaceiou' , 1 ),
is_utf8( $string ) ? $string : utf8_encode( $string )
);
}
Esses caras ai em cima vão verificar a codificação da string e remover todos os acentos dela, feito isso é converter para caixa baixa e trocar espaços por hifens...
echo strtolower( preg_replace( '/\s+/' , '-' , removeAccents( 'João Batista Neto' ) ) );
Saída:
>
joao-batista-neto
BigJhow / João,
Testei a função passada pelo BigJhow e independente do charset declarado a função não consegue remover os acentos/trocar pelo caracter correspondente...
As funções passadas pelo João funcionaram perfeitamente !
Agradeço pela ajuda!
Abraço!
function seoUrl($str){
$aaa = array('/(à|á|â|ã|ä|å|æ)/','/(è|é|ê|ë)/','/(ì|í|î|ï)/','/(ð|ò|ó|ô|õ|ö|ø)/','/(ù|ú|û|ü)/','/ç/','/þ/','/ñ/','/ß/','/(ý|ÿ)/','/(=|\+|\/|\\\|\.|\'|\_|\\n| |\(|\))/','/[^a-z0-9_ -]/s');
$bbb = array('a','e','i','o','u','c','d','n','s','y','-','');
return trim(trim(trim(preg_replace('/-{2,}/s', '-', preg_replace($aaa, $bbb, strtolower($str)))),'_'),'-');
}
Procuro optimizar a função acima, mas está funcionando para mim que é uma beleza!!! B)