terça-feira, 15 de dezembro de 2009

PHP Tirar Acentos - remove special characters



function retira_acentos($texto)
{
$array1 = array( "á", "à", "â", "ã", "ä", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ó", "ò", "ô", "õ", "ö", "ú", "ù", "û", "ü", "ç"
, "Á", "À", "Â", "Ã", "Ä", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ó", "Ò", "Ô", "Õ", "Ö", "Ú", "Ù", "Û", "Ü", "Ç" );
$array2 = array( "a", "a", "a", "a", "a", "e", "e", "e", "e", "i", "i", "i", "i", "o", "o", "o", "o", "o", "u", "u", "u", "u", "c"
, "A", "A", "A", "A", "A", "E", "E", "E", "E", "I", "I", "I", "I", "O", "O", "O", "O", "O", "U", "U", "U", "U", "C" );
return str_replace( $array1, $array2, $texto);
}
$texto = retira_acentos($variavel_q_quer_tirar_acentos);
$variavel_q_quer_tirar_acentos = $texto;

Se quiser ainda tirar carateres especiais como $ ou ª ou º entre outros sugiro um uso combinado de regex com str_replace conforme abaixo:

function retira_acentos($texto)
{
$array1 = array( "á", "à", "â", "ã", "ä", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ó", "ò", "ô", "õ", "ö", "ú", "ù", "û", "ü", "ç"
, "Á", "À", "Â", "Ã", "Ä", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ó", "Ò", "Ô", "Õ", "Ö", "Ú", "Ù", "Û", "Ü", "Ç" );
$array2 = array( "a", "a", "a", "a", "a", "e", "e", "e", "e", "i", "i", "i", "i", "o", "o", "o", "o", "o", "u", "u", "u", "u", "c"
, "A", "A", "A", "A", "A", "E", "E", "E", "E", "I", "I", "I", "I", "O", "O", "O", "O", "O", "U", "U", "U", "U", "C" );
    $texto= str_replace( $array1, $array2, $texto);
    $texto=preg_replace("/[^a-z0-9\s\-]/i", "", $texto);
    $texto=preg_replace("/\s/", "_", $texto); // Replace all spaces with underline
return $texto;
}

$texto = retira_acentos($variavel_q_quer_tirar_acentos);

Para não ter problema com o nome do arquivo, sugiro usar assim:

// Descobrir os 4 ultimos caracteres do arquivo, por exemplo .pdf
$final = $arquivo_name;
$final = substr($final,(strlen($final)-4),strlen($final));

$nome_sem_final=substr($arquivo_name, 0, -4);

$arquivo_name = retira_acentos($nome_sem_final).$final;


Para achar a extensão do arquivo temos também:

$info = pathinfo($filename);
$name = $info['filename'];
$ext  = $info['extension'];

// Shorter
$name = pathinfo($file, PATHINFO_FILENAME);

// Or in PHP 5.4
$name = pathinfo($filename)['filename'];

// Or in PHP 5.6, 7>
$ext=pathinfo($filename, PATHINFO_EXTENSION);
 
 
 



9 comentários:

  1. Luis, blog fantástico, vou seguí-lo. Obrigado pelo comentário que fez no meu blog neste post: http://redeserrossoeprogramacao.blogspot.com/2009/05/compartilhando-pasta-no-virtualboxhost.html
    Falou, abraço.

    ResponderExcluir
  2. existe uma outra opção através da função

    preg_replace("/&([a-z])[a-z]+;/i", "$1", htmlentities($valor));

    Eu uso a algum tempo e funciona perfeitamente

    ResponderExcluir
    Respostas
    1. Odeio fica respondendo em Blogs, mais como foi muito útil para um script meu, Obrigado Ricardo!

      Excluir
    2. Cara, me Salvou! Essa é a parte boa de ler os comentários... rs

      Excluir
  3. de dezenas de exeplos que achei na net, este foi o unico que funcionou perfeitamente.. Parabens, amigo!

    ResponderExcluir
  4. Valeu, mas para nome de arquivos precisa de um ajuste senão o file perde o tipo dele, mas muito bom

    ResponderExcluir
    Respostas
    1. Para não ter problema com o nome do arquivo, sugiro usar assim:

      // Descobrir os 4 ultimos caracteres do arquivo, por exemplo .pdf
      $final = $arquivo_name;
      $final = substr($final,(strlen($final)-4),strlen($final));

      $nome_sem_final=substr($arquivo_name, 0, -4);

      $arquivo_name = retira_acentos($nome_sem_final).$final;

      Excluir

Linux bash file returns unexpected token `$'do\r''

open file in vi edit with   vi filename.sh   command; type in vi  :set ff=unix  command; save file with  :wq It will save the file with unix...