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

JavaScript Discussion :

Fonction remplacer les caractères accentués


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut Fonction remplacer les caractères accentués
    Bonjour

    J'ai fait une fonction qui remplace les accents par des caractères sans accents, seulement voilà, certains accents ne sont pas remplacés, notamment quand il y a plusieurs fois le même caractère, et le premier ainsi que le dernier ne sont pas remplacés non plus.

    Mon appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    // Pour tester, j'ai fait une chaine remplie d'accents, certains y étant plusieurs fois
    chaine = 'ýþÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçËÌÜÝÞÍèéêëìíîïðñòóôõöøùúûüýëîïðËÌÍ';
    chaine = no_accent(chaine);
    alert(chaine);
    ?>
    Ma 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
     
    function no_accent(my_string) 
    	{
    		// tableau accents
    		var pattern_accent = new Array("À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É","Ê","Ë",
    		"Ì","Í","Î","Ï","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","Ø","Ù","Ú","Û","Ü","Ý",
    		"Þ","ß","à","á","â","ã","ä","å","æ","ç","è","é","ê","ë","ì","í","î",
    		"ï","ð","ñ","ò","ó","ô","õ","ö","ø","ù","ú","û","ü","ý","ý","þ","ÿ");
     
    		// tableau sans accents
    		var pattern_replace_accent = new Array("A","A","A","A","A","A","A","C","E","E","E","E",
    		"I","I","I","I","D","N","O","O","O","O","O","O","U","U","U","U","Y",
    		"b","s","a","a","a","a","a","a","a","c","e","e","e","e","i","i","i",
    		"i","d","n","o","o","o","o","o","o","u","u","u","u","y","y","b","y");
     
    		//pour chaque caractere si accentué le remplacer par un non accentué
    		for(var i=0;i<pattern_accent.length;i++)
    		{
    			// si on trouve un accent dans la chaine on le remplace par le caractere non accentué correspondant
     
    			if( my_string.indexOf(pattern_accent[i]) )
    			{
    				my_string = my_string.replace(pattern_accent[i],pattern_replace_accent[i]);
    			}
    		}
    		return my_string;
    	}
    Ce que ça me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ýbyAAAAAAACEEEEIIIIDNOOOOOOUUUUYbsaaaaaaacËÌÜÝÞÍeeeeiiiidnoooooouuuuýëîïðËÌÍ
    Comment puis-je faire pour gérer le fait que le caractère puisse être plusieurs fois dans la chaîne, et que les premier et dernier caractères soient remplacés aussi ?

    Cordialement
    Ginger

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    regexp => plusieurs posts traitent déja de ce sujet ..

    Une première manière de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var TabSpec = {"à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","è":"e","é":"e","ê":"e","ë":"e","ç":"c","ì":"i","í":"i","î":"i","ï":"i","ù":"u","ú":"u","û":"u","ü":"u","ÿ":"y","ñ":"n","-":" ","_":" "}; 
     
    function replaceSpec(Texte){
    	var reg=/[àáäâèéêëçìíîïòóôõöøùúûüÿñ_-]/gi; 
    	return Texte.replace(reg,function(){ return TabSpec[arguments[0].toLowerCase()];}).toLowerCase();
     	}
     
    var TestTexte="àAAÀAAÁÂÒÓÔÕÖØòÒÓÔÕ-ÖØòó_ôõöøÈÉÊËèéêëÇçÒÓÔÕÖØòÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"
    alert(replaceSpec(TestTexte))
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Autre manière un peu plus sophistiquée mais plus facilement maintenable:

    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
    34
    35
    var rules = {
    			a:"àáâãäå",
    			A:"ÀÁÂ",
    			e:"èéêë",
    			E:"ÈÉÊË",
    			i:"ìíîï",
    			I:"ÌÍÎÏ",
    			o:"òóôõöø",
    			O:"ÒÓÔÕÖØ",
    			u:"ùúûü",
    			U:"ÙÚÛÜ",
    			y:"ÿ",
    			c: "ç",
    			C:"Ç",
    			n:"ñ",
    			N:"Ñ"
    			}; 
     
     function  getJSONKey(key){
     for (acc in rules){
     if (rules[acc].indexOf(key)>-1){return acc}
     }
     }
     
    function replaceSpec(Texte){
    regstring=""
    for (acc in rules){
     regstring+=rules[acc]
     }
    reg=new RegExp("["+regstring+"]","g" )
    		return Texte.replace(reg,function(t){ return getJSONKey(t) });
     	}
     
    var TestTexte="àAAÀAAÁÂÒÓÔÕÖØòÒÓÔÕ-ÖØòó_ôõöøÈÉÊËèéêëÇçÒÓÔÕÖØòÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"
    alert(replaceSpec(TestTexte))
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    ó_ô
    Ton code s'est éveillé à la conscience !

    Skynet ! fuyez !

    edit : j'avais pas vu celui avec les lunettes............ dis tout de suite que tu te moques de mon avatar ! ()

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut

    non il sort de chez l'occuliste !
    Õ-Ö
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Aha ! Attention il va se fâcher ÒÓ

    Merci pour vos réponses !!

    Entre temps j'ai trouvé cette solution qui fonctionne du tonnerre, en mettant une regex sur chaque élément du tableau :
    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
     
    function no_accent(my_string)
    {
    // tableau accents
    		var pattern_accent = new Array(/À/g, /Á/g, /Â/g, /Ã/g, /Ä/g, /Å/g, /Æ/g, /Ç/g, /È/g, /É/g, /Ê/g, /Ë/g,
    		/Ì/g, /Í/g, /Î/g, /Ï/g, /Ð/g, /Ñ/g, /Ò/g, /Ó/g, /Ô/g, /Õ/g, /Ö/g, /Ø/g, /Ù/g, /Ú/g, /Û/g, /Ü/g, /Ý/g,
    		/Þ/g, /ß/g, /à/g, /á/g, /â/g, /ã/g, /ä/g, /å/g, /æ/g, /ç/g, /è/g, /é/g, /ê/g, /ë/g, /ì/g, /í/g, /î/g,
    		/ï/g, /ð/g, /ñ/g, /ò/g, /ó/g, /ô/g, /õ/g, /ö/g, /ø/g, /ù/g, /ú/g, /û/g, /ü/g, /ý/g, /ý/g, /þ/g, /ÿ/g);
     
    		// tableau sans accents
    		var pattern_replace_accent = new Array("A","A","A","A","A","A","A","C","E","E","E","E",
    		"I","I","I","I","D","N","O","O","O","O","O","O","U","U","U","U","Y",
    		"b","s","a","a","a","a","a","a","a","c","e","e","e","e","i","i","i",
    		"i","d","n","o","o","o","o","o","o","u","u","u","u","y","y","b","y");
     
    		//pour chaque caractere si accentué le remplacer par un non accentué
    		for(var i=0;i<pattern_accent.length;i++)
    		{
    			my_string = my_string.replace(pattern_accent[i],pattern_replace_accent[i]);
    		}
    		return my_string;
    }
    Merci encore !

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 05/03/2011, 12h20
  2. [RegEx] remplacer tous les caractères accentués d'une chaine
    Par Alexdezark dans le forum Langage
    Réponses: 6
    Dernier message: 13/11/2009, 12h47
  3. Réponses: 3
    Dernier message: 25/02/2009, 15h59
  4. les caractères accentués sont remplacés par des caractères chinois
    Par ghyosmik dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 04/12/2008, 22h33
  5. Remplacer les caractères accentués dans une chaine
    Par shaun_the_sheep dans le forum Général Java
    Réponses: 5
    Dernier message: 07/05/2008, 10h41

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