Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
>
Estou com dificuldades para remove acentos e cedilhas e incluir hífen entre as palavras no título.
Se alguém puder me dar uma luz, agradeço imensamente.
<?php
function removeAcento($var) {
$var = strtolower($var);
$var = eregi_replace("[áàâã]","a",$var);
$var = eregi_replace("[ª]"," ",$var);
$var = eregi_replace("[éèê]","e",$var);
$var = eregi_replace("[íìî]","i",$var);
$var = eregi_replace("[óòôõ]","o",$var);
$var = eregi_replace("[º]"," ",$var);
$var = eregi_replace("[úùû]","u",$var);
$var = eregi_replace(" ","-",$var);
$var = str_replace("[ç]","c",$var);
return $var;
}
//Teste
echo "Texto com acento:" . "á é í ó ú ç";
echo "<br>";
echo "Texto sem acento:" . removeAcento("á é í ó ú ç");
?>
>
Resultado do teste:
Remove os acentos,
repete o "a" em todas as demais letras
e erra ao remover o "ç"
Texto com acento:á é í ó ú ç
Texto sem acento:aa-ae-ai-ao-a--a�
>
Meu amigo Muito curuioso.
Sua função aqui funciono perfeitamente.
Hummm! No meu caso, repete o "a", quando remove acentos das demais vogais, e dá erro ao substituit "ç" por "c"...
Precisa verificar a codificação do seu editor de textos pra saber como está sendo salvo isso aí. Tem que ser a mesma usada no PHP.
Até onde eu sei, o PHP tem problemas com unicode, então eu aconselho a usar codificação ISO ou usar a extensão mb_string.
testei aqui tbm, o unico q não trocou o caracter foi o ç.
para trocar o 'ç' por 'c' deixe assim
$var = eregi_replace("[ç]","c",$var);
tome cuidado q no php5.3 eregi_* é uma função obsoleta ou seja gera um warning, no caso vc deve trocar eregi_replace por preg_replace.
usa essa ai fiz agora para vc
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;
}
echo removeAcentos(áâçã);
?>Shini, eu havia feito essa troca, mas, aí, não substitui nenhum caracter acentuado.
>
testei aqui tbm, o unico q não trocou o caracter foi o ç.
para trocar o 'ç' por 'c' deixe assim
$var = eregi_replace("[ç]","c",$var);
tome cuidado q no php5.3 eregi_* é uma função obsoleta ou seja gera um warning, no caso vc deve trocar eregi_replace por preg_replace.
>
usa essa ai fiz agora para vc
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;
}
echo removeAcentos(áâçã);
?>
>
Não remove acentos e nem hifeniza.
Fiz pequena modificação. Agora hifeniza, mas, remove a letras acentuadas em vez de substituí-las. :(
<?php
function removeAcento($string, $slug = false, $slug = '-') {
$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;
}
?>
O problema o Ç fica resolvido desse modo. Obrigado.
http://php.net/manual/en/function.strtr.php
>
Nesse link, obtive sucesso parcial. Resolvi o problema da remoção dos acentos e cedilhas.
Agora, a dificuldade é hifenizar os títulos...
<?php
function removeAcento($string){
$a = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ
ßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';
$b = 'aaaaaaaceeeeiiiidnoooooouuuuy
bsaaaaaaaceeeeiiiidnoooooouuuyybyRr';
$string = utf8_decode($string);
$string = strtr($string, utf8_decode($a), $b);
$string = strtolower($string);
return utf8_encode($string);
}
?>
>
<?php
function removeAcento($string, $slug = false, $slug = '-') {
$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;
}
?>
<?php
function removeAcento($string){
$a = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ
ßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';
$b = 'aaaaaaaceeeeiiiidnoooooouuuuy
bsaaaaaaaceeeeiiiidnoooooouuuyybyRr';
$string = utf8_decode($string);
$string = strtr($string, utf8_decode($a), $b);
$string = strtolower($string);
return utf8_encode($string);
}
?>
>
Resolvido! Publico abaixo o código que remove acentos e hifeniza.
Obrigado a todos que colaboraram!
Imaster e seus colaboradores são demais!
<?php
function removeAcento($string){
$a = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ
ßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ ( )';
$b = 'aaaaaaaceeeeiiiidnoooooouuuuy
bsaaaaaaaceeeeiiiidnoooooouuuyybyRr (-)';
$string = utf8_decode($string);
$string = strtr($string, utf8_decode($a), $b);
$string = strtolower($string);
return utf8_encode($string);
}
?>
Meu amigo Muito curuioso.
Sua função aqui funciono perfeitamente.