IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Suppression d'accents en UTF-8


Sujet :

Langage PHP

  1. #1
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Points : 313
    Points
    313
    Par défaut Suppression d'accents en UTF-8
    Bonjour,

    Je récupère une variable POST donc le contenu possède des accents.
    Mes pages sont en UTF-8.

    J'aimerais utiliser cette fonction pour supprimer les accents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	function supprime_accents($chaine)
    	{
    		$tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
    		$replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
    		return(strtr($chaine,$tofind,$replac));
    	}
    Mais au lieu de transformer le "é" en "e", elle le transforme en "n�"....

    Comment faire pour résoudre ce problème ?
    Merci d'avance !
    @+
    N'oubliez pas le tag .
    Merci de ne pas envoyer de MP pour des problèmes techniques.

  2. #2
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Points : 313
    Points
    313
    Par défaut
    Peut-être cela est-il du à la fonction strtr(), car si j'utilise la fonction str_replace() les accents sont bien remplacés...

    Quelqu'un peut-t-il me confirmer cela ?
    N'oubliez pas le tag .
    Merci de ne pas envoyer de MP pour des problèmes techniques.

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 233
    Points : 15 528
    Points
    15 528
    Par défaut
    Citation Envoyé par navis84
    Peut-être cela est-il du à la fonction strtr(), car si j'utilise la fonction str_replace() les accents sont bien remplacés...

    Quelqu'un peut-t-il me confirmer cela ?
    je confirme, strtr travaille directement sur les octet donc ce n'est pas facile à utiliser avec UTF-8
    par contre str_replace fonctionne très bien, voilà le code que j'utilise pour les minuscules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function minusculesSansAccents($texte)
    {
        $texte = mb_strtolower($texte, 'UTF-8');
        $texte = str_replace(
            array(
                'à', 'â', 'ä', 'á', 'ã', 'å',
                'î', 'ï', 'ì', 'í', 
                'ô', 'ö', 'ò', 'ó', 'õ', 'ø', 
                'ù', 'û', 'ü', 'ú', 
                'é', 'è', 'ê', 'ë', 
                'ç', 'ÿ', 'ñ', 
            ),
            array(
                'a', 'a', 'a', 'a', 'a', 'a', 
                'i', 'i', 'i', 'i', 
                'o', 'o', 'o', 'o', 'o', 'o', 
                'u', 'u', 'u', 'u', 
                'e', 'e', 'e', 'e', 
                'c', 'y', 'n', 
            ),
            $texte
        );
     
        return $texte;        
    }
    ensuite si tu as besoin de fonctions spéciales utilise les fonctions là :
    http://php.net/ref.mbstring

  4. #4
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Points : 313
    Points
    313
    Par défaut
    Super ! Ca fonctionne à merveille.

    Merci beaucoup !
    N'oubliez pas le tag .
    Merci de ne pas envoyer de MP pour des problèmes techniques.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Points : 313
    Points
    313
    Par défaut
    Bonjour,

    je viens de tester cette fonction sur un autre de mes scripts qui est lui aussi encodé en UTF-8... et au lieu de m'enlever les accents de certains caractères, la fonction me supprime carrément le caractère accentué...

    Auriez-vous une idée du pourquoi ?

    Merci d'avance !

    EDIT : je précise que la chaîne accentuée est issue d'un formulaire de page HTML, elle-même en UTF-8.

    EDIT 2 : j'ai ajouté l'encodage de la page avec le code ci-dessous et j'ai utilisé la fonction utf8_decode() pour ma chaîne de caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-Type: text/html; charset=UTF-8");
    N'oubliez pas le tag .
    Merci de ne pas envoyer de MP pour des problèmes techniques.

  6. #6
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Attention à ne pas confondre problèmes de conversion et problèmes d'affichage car ça arrive fréquemment. Je te conseille d'analyser directement caractère par caractère pour voir le résultat de tes manipulations et pour clarifier la situation.

    Etant donné qu'un caractère accentué en UTF8 est codé sur 2 bytes, tu peux facilement savoir si tu es en utf8 ou pas et si l'utilisation de l'utf8_decode s'avère nécessaire ou pas.

    Selon le brower, envoyer une entête utf8 fait que les données sont converties en UTF8 lorsqu'elles sont renvoyées vers le serveur mais le brower est capable de les décoder automatiquement, ce qui fait que si tu décodes une fois de plus la donnée dans ton script, il ne reçoit plus un contenu "utf8" et l'affichage commence à délirer.

    Donc moralité, le décodage n'est pas nécessaire sauf si tu désires exploiter ces données dans un autre contexte

  7. #7
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Points : 313
    Points
    313
    Par défaut
    Merci pour tes précisions.

    Ce n'est pas toujours évident de gérer ces encodages, et j'ai encore du mal à le faire.

    Ca viendra au fur et à mesure ! Merci !

    @+
    N'oubliez pas le tag .
    Merci de ne pas envoyer de MP pour des problèmes techniques.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Février 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut le même mais avec les majuscules !
    Citation Envoyé par mathieu Voir le message
    je confirme, strtr travaille directement sur les octet donc ce n'est pas facile à utiliser avec UTF-8
    par contre str_replace fonctionne très bien, voilà le code que j'utilise pour les minuscules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function minusculesSansAccents($texte)
    {
        $texte = mb_strtolower($texte, 'UTF-8');
        $texte = str_replace(
            array(
                'à', 'â', 'ä', 'á', 'ã', 'å',
                'î', 'ï', 'ì', 'í', 
                'ô', 'ö', 'ò', 'ó', 'õ', 'ø', 
                'ù', 'û', 'ü', 'ú', 
                'é', 'è', 'ê', 'ë', 
                'ç', 'ÿ', 'ñ', 
            ),
            array(
                'a', 'a', 'a', 'a', 'a', 'a', 
                'i', 'i', 'i', 'i', 
                'o', 'o', 'o', 'o', 'o', 'o', 
                'u', 'u', 'u', 'u', 
                'e', 'e', 'e', 'e', 
                'c', 'y', 'n', 
            ),
            $texte
        );
     
        return $texte;        
    }
    ensuite si tu as besoin de fonctions spéciales utilise les fonctions là :
    http://php.net/ref.mbstring
    Ça ma bien aidé et comme je l'ai adapté à mon besoin, voici avec la gestion des majuscules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    	function stripAccents($texte) {
    		$texte = str_replace(
    			array(
    				'à', 'â', 'ä', 'á', 'ã', 'å',
    				'î', 'ï', 'ì', 'í', 
    				'ô', 'ö', 'ò', 'ó', 'õ', 'ø', 
    				'ù', 'û', 'ü', 'ú', 
    				'é', 'è', 'ê', 'ë', 
    				'ç', 'ÿ', 'ñ',
    				'À', 'Â', 'Ä', 'Á', 'Ã', 'Å',
    				'Î', 'Ï', 'Ì', 'Í', 
    				'Ô', 'Ö', 'Ò', 'Ó', 'Õ', 'Ø', 
    				'Ù', 'Û', 'Ü', 'Ú', 
    				'É', 'È', 'Ê', 'Ë', 
    				'Ç', 'Ÿ', 'Ñ', 
    			),
    			array(
    				'a', 'a', 'a', 'a', 'a', 'a', 
    				'i', 'i', 'i', 'i', 
    				'o', 'o', 'o', 'o', 'o', 'o', 
    				'u', 'u', 'u', 'u', 
    				'e', 'e', 'e', 'e', 
    				'c', 'y', 'n', 
    				'A', 'A', 'A', 'A', 'A', 'A', 
    				'I', 'I', 'I', 'I', 
    				'O', 'O', 'O', 'O', 'O', 'O', 
    				'U', 'U', 'U', 'U', 
    				'E', 'E', 'E', 'E', 
    				'C', 'Y', 'N', 
    			),$texte);
    		return $texte;
    	}

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Je pense que tu as depuis rectifié par toi même mais tu as deux erreur dans ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    	function stripAccents($texte) {
    		$texte = str_replace(
    			array(
    				'à', 'â', 'ä', 'á', 'ã', 'å',
    				'î', 'ï', 'ì', 'í', 
    				'ô', 'ö', 'ò', 'ó', 'õ', 'ø', 
    				'ù', 'û', 'ü', 'ú', 
    				'é', 'è', 'ê', 'ë', 
    				'ç', 'ÿ', 'ñ',
    				'À', 'Â', 'Ä', 'Á', 'Ã', 'Å',
    				'Î', 'Ï', 'Ì', 'Í', 
    				'Ô', 'Ö', 'Ò', 'Ó', 'Õ', 'Ø', 
    				'Ù', 'Û', 'Ü', 'Ú', 
    				'É', 'È', 'Ê', 'Ë', 
    				'Ç', 'Ÿ', 'Ñ', <= ici
    			),
    			array(
    				'a', 'a', 'a', 'a', 'a', 'a', 
    				'i', 'i', 'i', 'i', 
    				'o', 'o', 'o', 'o', 'o', 'o', 
    				'u', 'u', 'u', 'u', 
    				'e', 'e', 'e', 'e', 
    				'c', 'y', 'n', 
    				'A', 'A', 'A', 'A', 'A', 'A', 
    				'I', 'I', 'I', 'I', 
    				'O', 'O', 'O', 'O', 'O', 'O', 
    				'U', 'U', 'U', 'U', 
    				'E', 'E', 'E', 'E', 
    				'C', 'Y', 'N', <= et là !
    			),$texte);
    		return $texte;
    	}

  10. #10
    Membre habitué
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2018
    Messages : 44
    Points : 158
    Points
    158
    Par défaut la virgule en fin de tableau est possible
    Désolé mais il n'y avait pas d'erreur.
    Voici un extrait de la doc de PHP :
    La virgule après le dernier élément d'un tableau est optionnelle et peut ne pas être ajoutée. C'est généralement ce qui est fait pour les tableaux sur une seule ligne, i.e. array(1, 2) est préféré à array(1, 2, ). Pour les tableaux sur plusieurs lignes, la virgule finale est généralement utilisée, car elle permet d'ajouter plus facilement de nouveaux éléments à la fin.
    Citation Envoyé par Ronin Voir le message
    Je pense que tu as depuis rectifié par toi même mais tu as deux erreur dans ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    	function stripAccents($texte) {
    		$texte = str_replace(
    			array(
    				'à', 'â', 'ä', 'á', 'ã', 'å',
    				'î', 'ï', 'ì', 'í', 
    				'ô', 'ö', 'ò', 'ó', 'õ', 'ø', 
    				'ù', 'û', 'ü', 'ú', 
    				'é', 'è', 'ê', 'ë', 
    				'ç', 'ÿ', 'ñ',
    				'À', 'Â', 'Ä', 'Á', 'Ã', 'Å',
    				'Î', 'Ï', 'Ì', 'Í', 
    				'Ô', 'Ö', 'Ò', 'Ó', 'Õ', 'Ø', 
    				'Ù', 'Û', 'Ü', 'Ú', 
    				'É', 'È', 'Ê', 'Ë', 
    				'Ç', 'Ÿ', 'Ñ', <= ici
    			),
    			array(
    				'a', 'a', 'a', 'a', 'a', 'a', 
    				'i', 'i', 'i', 'i', 
    				'o', 'o', 'o', 'o', 'o', 'o', 
    				'u', 'u', 'u', 'u', 
    				'e', 'e', 'e', 'e', 
    				'c', 'y', 'n', 
    				'A', 'A', 'A', 'A', 'A', 'A', 
    				'I', 'I', 'I', 'I', 
    				'O', 'O', 'O', 'O', 'O', 'O', 
    				'U', 'U', 'U', 'U', 
    				'E', 'E', 'E', 'E', 
    				'C', 'Y', 'N', <= et là !
    			),$texte);
    		return $texte;
    	}

  11. #11
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 755
    Points : 2 986
    Points
    2 986
    Par défaut
    Beau déterrage de post (plus de treize ans).

    La virgule finale était bien une erreur dans les précédentes versions de php, plus maintenant
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  12. #12
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 233
    Points : 15 528
    Points
    15 528
    Par défaut
    16 ans après mon message dans cette discussion, j'utilise ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $tls = \Transliterator::createFromRules(
    	  "::Any-Latin; ::Latin-ASCII; ::NFD; ::NFC;"
    	, \Transliterator::FORWARD
    );
     
    $texte_avec_accent = "おはようございます Œ É på høyeste nivå И я люблю ест fi";
    $texte_sans_accent = $tls->transliterate($texte_avec_accent); 
     
    // résultat : ohayougozaimasu OE E pa hoyeste niva I a lublu est fi

    https://www.php.net/manual/fr/class.transliterator.php

  13. #13
    Membre habitué
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2018
    Messages : 44
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    Beau déterrage de post (plus de treize ans).

    La virgule finale était bien une erreur dans les précédentes versions de php, plus maintenant
    C'est effectivement un beau déterrage de post mais comme la virgule finale est désormais valide j'ai pensé que c'était mieux de le préciser malgré l'ancienneté du post initial.

    Oui j'imaginais aisément que la virgule finale avait pu être interdite par le passé dans d'anciennes versions, merci pour la confirmation.

  14. #14
    Membre habitué
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2018
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2018
    Messages : 44
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par mathieu Voir le message
    16 ans après mon message dans cette discussion, j'utilise ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $tls = \Transliterator::createFromRules(
    	  "::Any-Latin; ::Latin-ASCII; ::NFD; ::NFC;"
    	, \Transliterator::FORWARD
    );
     
    $texte_avec_accent = "おはようございます Œ É på høyeste nivå И я люблю ест fi";
    $texte_sans_accent = $tls->transliterate($texte_avec_accent); 
     
    // résultat : ohayougozaimasu OE E pa hoyeste niva I a lublu est fi

    https://www.php.net/manual/fr/class.transliterator.php
    Ça m'a l'air bien comme solution, je vais tester.
    Entre temps j'avais aussi trouvé un post intéressant ici https://stackoverflow.com/questions/...r-lower-in-php où une des solutions utilise les expressions régulières et une autre utilise la fonction isUUppercase (https://www.php.net/manual/en/intlchar.isuuppercase.php).

    Mon problème est de déterminer si une chaîne de caractères ne contient que des majuscules et comme il s'agit de noms propres, éventuellement d'origine étrangère, il y a en fait un paquet de caractères majuscules qu'une fonction comme ctype_upper ne reconnaît pas comme des majuscules...

  15. #15
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par mathieu Voir le message
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tls = \Transliterator::createFromRules(
    	  "::Any-Latin; ::Latin-ASCII; ::NFD; ::NFC;"
    	, \Transliterator::FORWARD
    );
    Pas besoin de faire une NFD avant une NFC, car la NFC consiste déjà à faire une décomposition des caractères pour les réordonner puis les recomposer le cas échéant.

    Exemple avec un A majuscule ogonek et accent grave (ça doit surement pas exister, mais c'est pas grave, c'est pour l'exemple) composé de 4 manières différentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function getBytes($str) {
        $result = '';
        for ($i=0; $i < strlen($str); $i++) {
             $result .= dechex(ord($str[$i])). ' ';
        }
        return rtrim($result);
    }
     
    $inputs = [
        'A' . "\u{0328}\u{0300}",
        'A' . "\u{0300}\u{0328}",
        'À' . "\u{0328}",
        'Ą' . "\u{0300}"
    ]; 
     
    $tls = \Transliterator::createFromRules('::NFC;', \Transliterator::FORWARD);
     
    foreach ($inputs as $input) {
        $output = $tls->transliterate($input);
        echo getBytes($output), PHP_EOL;
    }
    Pour les 4 cas on obtient les octets C4 84 CC 80 (soit un A majuscule ogonek et l'accent grave combinant), preuve qu'il y a bien eu décomposition et réordonnement avant la compostition.



    En tout cas, le transliterator est clairement la meilleure solution pour le PO, d'autant plus qu'il permet en plus de faire des réglages plus fins pour traiter des cas particuliers au besoin.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  16. #16
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par web bea Voir le message
    Mon problème est de déterminer si une chaîne de caractères ne contient que des majuscules et comme il s'agit de noms propres, éventuellement d'origine étrangère, il y a en fait un paquet de caractères majuscules qu'une fonction comme ctype_upper ne reconnaît pas comme des majuscules...
    Dans ce cas tu devrais plutôt créer un nouveau topic.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  17. #17
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 233
    Points : 15 528
    Points
    15 528
    Par défaut
    merci CosmoKnacki pour cette optimisation. j'avais récupéré le code sans comprendre le texte de configuration mais comme j'avais testé que la suppression d'accent fonctionnait bien, je l'ai adopté.

    je viens de voir que la documentation php propose de lire cette page pour mieux comprendre :
    https://unicode-org.github.io/icu/us...forms/general/
    mais même après cette lecture, je n'ai toujours pas compris à quoi correspondent les différents éléments comme "nfd" ou "nfc" par exemple. mais comme je le disais, la suppression d'accent fonctionne comme attendu donc je réutiliserai ce code.

  18. #18
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par mathieu Voir le message
    merci CosmoKnacki pour cette optimisation. j'avais récupéré le code sans comprendre le texte de configuration mais comme j'avais testé que la suppression d'accent fonctionnait bien, je l'ai adopté.

    je viens de voir que la documentation php propose de lire cette page pour mieux comprendre :
    https://unicode-org.github.io/icu/us...forms/general/
    mais même après cette lecture, je n'ai toujours pas compris à quoi correspondent les différents éléments comme "nfd" ou "nfc" par exemple. mais comme je le disais, la suppression d'accent fonctionne comme attendu donc je réutiliserai ce code.
    Il faut dire que le manuel PHP botte en touche sur le sujet (alors que 5 ou 6 exemples bien choisis rendraient pas mal de services) et renvoie à la documentation ICU qui est bien ardue (car elle n'épargne aucun détail). En plus lorsqu'on se livre à des tests en PHP avec le transliterator, on est toujours en train de se demander si on ne s'est pas planter dans la syntaxe (et surtout où).

    Pour ce qui est de la normalisation en particulier, deux pages wikipédia permettent de se mettre le pied à l'étrier: Équivalence Unicode (assez générale, explique le pourquoi du comment) et Normalisation Unicode (pour le détail des 4 formes de normalisation).
    Pour aller plus loin, il faut en passer par la documentation d'Unicode et la partie concernant la normalisation est dans une annexe. C'est ardu, mais déjà la lecture de la section 1 nommée "Introduction" fournit un bon niveau de compréhension du truc. J'irais presque à dire que le reste c'est pour les diners mondains. La section 6 fournit des exemples supplémentaires.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. suppression des accents dans un fichier sous csh
    Par zpipol dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 29/10/2008, 22h58
  2. [HTML] Encodage des accents en UTF-8 (très bizarre)
    Par Aspic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 02/07/2008, 14h01
  3. Affichage des accents avec UTF-8
    Par jlb59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 18/12/2007, 19h56
  4. Suppression des Accents
    Par Tanelorn dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 03/12/2007, 01h01
  5. Suppression des accents et mise en Majuscules
    Par mlzim dans le forum Contribuez
    Réponses: 4
    Dernier message: 07/11/2007, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo