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 :

remplacer tous les caractères accentués d'une chaine [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut remplacer tous les caractères accentués d'une chaine
    Bonjour à tous,

    Je cherche à remplacer tous les caractères accentués d'une string par le même caractère sans accent.

    àáâ => a
    óô => o
    èéêë => e
    ç => c
    îï => i
    ùûü => u

    Par exemple si j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $maString= "àéèùyy";
    je voudrais arriver à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $maStringOk= "aeeuyy";
    Quelqu'un peut-il m'aider à trouver l'expression régulière pour arriver à ça ?

    Merci d'avance pour vos réponses.

  2. #2
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2009
    Messages : 46
    Points : 74
    Points
    74
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     function removeAccents($string)
    {
          return strtr($string,
              "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
              "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn"
              );
    }
    Bon courage,
    Sky

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Bonjour graphiks,

    Merci beaucoup pour la fonction strtr() qui correspond exactement à mes besoins d'une manière on ne peut plus simple

    Bonne journée à tous

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Petite recherche web et regardes sur ce lien tu auras les deux solutions avec les explications.

    ici

    Ce sont les remarques qui sont intéréssantes, qu'importe la solution ... on peut même utiliser un tableau de conversions.

    Bone journée
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Bonjour Fench,

    Merci de ta réponse qui m'intéresse beaucoup aussi car elle traite du même problème traité avec une expression régulière et que comme j'avais obtenu une réponse répondant parfaitement à mon cas je n'avais pas osé poser

    Dans mon cas ils s'agit de renommer des fichiers images que l'on télécharge via un input de type file pour qu'ils ne contiennent plus de caractères pouvant gêner les traitements ultérieurs.

    Je pense donc que strtr() conviendra toujours.

    Mais si quelqu'un peut me le confirmer ou au contraire m'indiquer des cas ou cela ne fonctionnera pas ça m'intéresse

  6. #6
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Il y a d'autres caractères parasites que les lettres accentuées. J'ai reçu des fichiers du type Ë#fa-bilou _ga%ù$.jpg, il fut un temps (enfin, à peu près ce genre de nom).

    Tu peux compléter ta méthode par un traitement qui vire tous les caractères non alphanumériques, par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $out = preg_replace("/\W/", "", $in);
    Tel quel, c'est un peu brutal (un nom de fichier correct accepte les tirets haut et bas par exemple) mais ça s'affine facilement.

  7. #7
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    sinon faut passer par htmlentites

    tu convertis ta chaine en htmlentities puis tu fais un replace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace("#&([a-z])[^;]+;#","$1",$chaine);
    mouaip bon faut se mefier des $gt;

    mieux vaut lister exhaustivement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regaccents="#&([a-z])((acute)|(grave)|(circ)|(tilde)|(uml)|(ring)|(cedil));#"
    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 !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/12/2010, 16h58
  2. Réponses: 3
    Dernier message: 25/02/2009, 15h59
  3. 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
  4. [RegEx] caractère pour remplacer tous les caractères dans une regex
    Par sp2308 dans le forum Langage
    Réponses: 6
    Dernier message: 09/02/2008, 01h06
  5. Réponses: 6
    Dernier message: 05/10/2007, 09h36

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