Essa função é muito útil quando queremos trabalhar com URLs amigáveis e precisamos passar o slug (versão sem acento, espaço e caracteres especiais de uma string) para uma URL.
Veja como é simples usar a função:
// Apenas remove os acentos echo removeAcentos(' [Resolvido] » Problemas na conversão de página html'); // [resolvido] » problemas na conversao de pagina htm
// Cria um slug da string echo removeAcentos(' [Resolvido] » Problemas na conversão de página html', '-'); // resolvido-problemas-na-conversao-de-pagina-html
O segundo parâmetro da função é o caractere que será usado no slug substituindo espaços e caracteres especiais.
Vamos ao código da função:
function removeAcentos($string, $slug = false) { $string = strtolower($string); // Código ASCII das vogais $ascii['a'] = range(224, 230); $ascii['e'] = range(232, 235); $ascii['i'] = range(236, 239); $ascii['o'] = array_merge(range(242, 246), array(240, 248)); $ascii['u'] = range(249, 252); // Código ASCII dos outros caracteres $ascii['b'] = array(223); $ascii['c'] = array(231); $ascii['d'] = array(208); $ascii['n'] = array(241); $ascii['y'] = array(253, 255); foreach ($ascii as $key=>$item) { $acentos = ''; foreach ($item AS $codigo) $acentos .= chr($codigo); $troca[$key] = '/['.$acentos.']/i'; } $string = preg_replace(array_values($troca), array_keys($troca), $string); // Slug? if ($slug) { // Troca tudo que não for letra ou número por um caractere ($slug) $string = preg_replace('/[^a-z0-9]/i', $slug, $string); // Tira os caracteres ($slug) repetidos $string = preg_replace('/' . $slug . '{2,}/i', $slug, $string); $string = trim($string, $slug); } return $string; }
Como vocês podem ver, no começo da função, entre as linhas 9 e 21 é onde definimos os códigos ASCII de cada acento/caractere especial que será convertido por sua letra… Depois nós rodamos um foreach e montamos as ERs (expressões regulares) para a substituição e fazemos toda a troca.
A vantagem de usar o código ASCII de cada caractere é que não importa em qual codificação seu arquivo está salvo, ela vai funcionar!
Caso você queira fazer a substituição em strings com mais de uma linha você precisa trocar onde tem “/i” por “/mi” nas linhas 26, 34 e 36.
Espero que tenham gostado!
Update: Se a sua string estiver codificada em UTF-8 você precisa usar a utf8_decode() antes de passar a string pra função.
Fonte: Thiago Belem
Valeu ajudouuuuu muito obrigado!
Que bom Everton =)