Filosofia de Vida – Pensamento, comportamento e opinião

29
Aug

Como remover acentos com regular expression no PHP usando Enconding

O PHP ainda não lida direito com enconding type, se você mandar substituir um ‘á’ e a string não estiver em UTF-8 você terá sérios problemas. Eu rachei a cuca um pouco e consegui um wordarround bem interessante.

Usei os HTML entities (que já entendem o encoding type) e depois mandei substituir as entidades por sua respectiva letra sem acentos. Easy, clean e indolor.

Veja o código:


function listaimagemRemoveAcentos($str, $enc = "UTF-8"){

$acentos = array(
'A' => '/À|Á|Â|Ã|Ä|Å/',
'a' => '/à|á|â|ã|ä|å/',
'C' => '/Ç/',
'c' => '/ç/',
'E' => '/È|É|Ê|Ë/',
'e' => '/è|é|ê|ë/',
'I' => '/Ì|Í|Î|Ï/',
'i' => '/ì|í|î|ï/',
'N' => '/Ñ/',
'n' => '/ñ/',
'O' => '/Ò|Ó|Ô|Õ|Ö/',
'o' => '/ò|ó|ô|õ|ö/',
'U' => '/Ù|Ú|Û|Ü/',
'u' => '/ù|ú|û|ü/',
'Y' => '/Ý/',
'y' => '/ý|ÿ/',
'a.' => '/ª/',
'o.' => '/º/');

   return preg_replace($acentos,
                       array_keys($acentos),
                       htmlentities($str,ENT_NOQUOTES, $enc));
}

Com esta função simples resolvi todos os quiprocós :)

11 Responses to “Como remover acentos com regular expression no PHP usando Enconding”

  1. 1
    Alexandre Says:

    Meus parabéns! Função simples e a única que resolveu meu problema de acentuação com um script de busca no site. ;) Obrigado!

  2. 2
    Diego Soares Says:

    Os acentos são problemas que nós brasileiros enfrentamos constantemente. Felizmente, a sua função resolve esses problemas.

    Abraços,

    Diego Soares

  3. 3
    Flavio Silveira Says:

    Muito obrigado…

    Passei dois dias tentando resolver isso…

    Obrigado mesmo..
    te devo essa…

  4. 4
    Daniel Affonso Says:

    MUITO OBRIGADO por compatilhar essa funcao.
    Boa sacada, parabens e mais uma vez muito obrigado.
    Daniel

  5. 5
    Francisco Ernesto Teixeira Says:

    Quando você casar a mulher vai ser sua!

  6. 6
    douglas Says:

    Parabens.. foi o único q funcionou! auhauhauhaa

  7. 7
    Rodrigo Says:

    Cara, parabéns mesmo!

    Já havia testado um monte de funções e não funcionava direito. A sua funcionou certinho!

    D+! Valeu!

  8. 8
    Fábio Says:

    SHOW DE BOLA!

    Pra quem precisa dela p/ usar em urls amigáveis, segue sua função modificada.

    /*—————————————–*/

    function urlClear($str){
    $str = strtolower($str);
    $acentos = array(
    ‘a’ => ‘/à|á|â|ã|ä|å/’,
    ‘c’ => ‘/ç/’,
    ‘e’ => ‘/è|é|ê|ë/’,
    ‘i’ => ‘/ì|í|î|ï/’,
    ‘n’ => ‘/ñ/’,
    ‘o’ => ‘/ò|ó|ô|õ|ö/’,
    ‘u’ => ‘/ù|ú|û|ü/’,
    ‘y’ => ‘/ý|ÿ/’,
    ‘a.’ => ‘/ª/’,
    ‘o.’ => ‘/º/’,
    ‘-’ => ‘/[^a-z,0-9,-]/’,
    ‘ ‘ => ‘/–/’,
    ” => ‘/[^a-z,0-9,-]/’
    );
    return preg_replace($acentos, array_keys($acentos), htmlentities($str, ENT_NOQUOTES));
    }

    /*—————————————–*/

  9. 9
    Paiva Junior Says:

    Muito bom esse script.
    E para quem precisa dele ainda mais completo (para tudo)
    /*—————————————–*/
    function RemoveAcentos($var, $enc = “UTF-8″) {

    $acentos = array(
    ‘A’ => ‘/À|Á|Â|Ã|Ä|Å|Â|À|Á|Ä|Ã/’,
    ‘a’ => ‘/à|á|â|ã|ä|å|á|à|â|ã|ä/’,
    ‘C’ => ‘/Ç|Ç/’,
    ‘c’ => ‘/ç|ç/’,
    ‘E’ => ‘/È|É|Ê|Ë|Ê|È|É|Ë/’,
    ‘e’ => ‘/è|é|ê|ë|é|è|ê|ë/’,
    ‘I’ => ‘/Ì|Í|Î|Ï|Î|Í|Ì|Ï/’,
    ‘i’ => ‘/ì|í|î|ï|î|í|ì|ï/’,
    ‘N’ => ‘/Ñ|Ñ/’,
    ‘n’ => ‘/ñ|ñ/’,
    ‘O’ => ‘/Ò|Ó|Ô|Õ|Ö|Ô|Õ|Ò|Ó|Ö/’,
    ‘o’ => ‘/ò|ó|ô|õ|ö|ó|ò|ô|õ|ö/’,
    ‘U’ => ‘/Ù|Ú|Û|Ü|Û|Ù|Ú|Ü/’,
    ‘u’ => ‘/ù|ú|û|ü|ú|ù|û|ü/’,
    ‘Y’ => ‘/Ý|Ý/’,
    ‘y’ => ‘/ý|ÿ|ý|ÿ/’,
    ‘a.’ => ‘/ª|ª/’,
    ‘o.’ => ‘/º|º/’);

    return preg_replace($acentos,
    array_keys($acentos),
    htmlentities($var, ENT_NOQUOTES, $enc));
    }
    // Como usar: echo RemoveAcentos(“Amanhã não irei caçar”)
    /*—————————————–*/

  10. 10
    Jonnathan Says:

    Valeu mano, testei varias funcoes, somente esta funcionou…

  11. 11
    Denis Says:

    Realmente tiro o chapéu!
    Tentei resolver isso já faz um bom tempo.. Cheguei até desistir de resolver este problema. Finalmente encontrei alguem que conseguiu resolver meu problema e com certeza de muitos!

    Vlw!

Leave a Reply

© 2010 Filosofia de Vida – Pensamento, comportamento e opinião | Entries (RSS) and Comments (RSS)

Design by Web4 Sudoku - Powered By Wordpress