accents

[PHP] Supprimer les accents des caractères accentués

nous avons vu dans un précédent snippet comment remplacer les caractères accentués d'une chaine par leur équivalent html.

ici nous allon voir une petite fonction pour les remplacer par leurs équivalents sans les accents :)

function removeAccents($string)
    {
        return iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $string);
    }

à noter un fonctionnement bizarre sous windows, donc attention, fonctionnel sous Linux seulement.

si vous voulez un tuto complet sur le sujet, un bon article ici : http://www.weirdog.com/blog/php/supprimer-les-accents-des-caracteres-acc...

EDIT :
Après quelques tests plus poussés, iconv semble un peu à la ramasse, rien ne vaut une bonne vielle fonction maison pour faire le boulot :

function _removeAccents ($text) {
        $alphabet = array(
            'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj','Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A',
            'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I',
            'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U',
            'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss','à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a',
            'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i',
            'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u',
            'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'ƒ'=>'f',
        );

        $text = strtr ($text, $alphabet);

        // replace all non letters or digits by -
        $text = preg_replace('/\W+/', '-', $text);

        return $text;
    }
Subscribe to RSS - accents