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 :

Traiter les caractères accentués et ponctuations dans une chaîne


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 116
    Points : 55
    Points
    55
    Par défaut Traiter les caractères accentués et ponctuations dans une chaîne
    bonjour, j'ai cette chaine de caractere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strtr($iliens['value_rubrique_cont'],  "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
    Elle supprime les accents. Comment faire pour qu'elle supprime tout ce qui est "!, ?, ;, :"...


    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    à proprement parlé, le code cité ne "supprime" pas, mais "remplace" un caractère par un autre.
    Ici en l'occurence, elle remplace des caractères accentués par des caractères non-accentués.

    Tu peux faire comme ca :
    $chaine = strtr($chaine, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ!?;:", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn ");
    (mettre dans la 2eme chaine autant d'"espaces" que de caractères à remplacer par "rien")

    Mais le mieux (si tu as plusieurs chaines qui doivent subir le meme traitement) est de créer une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    function noaccent($chaine) {
      // remplace caracteres accentues + supprime les !?;:
      // dans la 2eme liste : mettre autant d'"espaces" que de caracteres a supprimer
      $chaine = strtr($chaine,  "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ!?;:", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn    ");
      return $chaine;
    }
    ?>
    Que tu peux alors appeler pour chaque chaine a modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $chaine1 = noaccent($chaine1);
    $chaine2 = noaccent($chaine2);
    ...
    ?>

  3. #3
    Invité
    Invité(e)
    Par défaut
    Rectification :
    la solution que je t'ai donnée remplace les caractères !?;: par des espaces.

    Pour vraiment les supprimer (sans ajout d'espace) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    function noaccent($chaine) {
      // remplace caracteres accentues
      $chaine = strtr($chaine, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
      // supprime les !?;:
      $chaine = str_replace("!","",$chaine);
      $chaine = str_replace("?","",$chaine);
      $chaine = str_replace(";","",$chaine);
      $chaine = str_replace(":","",$chaine);
      // remplace les "double espace" en "un seul espace"
      $chaine = str_replace("  "," ",$chaine);
      return $chaine;
    }
    ?>
    Ex:
    ---c'étàit ? quoî cê ; biÑz : Íci !?---
    donne :
    ---c'etait quoi ce binz ici ---

    Remarque :
    Si tu veux aussi supprimer les " (double quote), ajouter :
    $chaine = str_replace("\"","",$chaine);

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Plus dingue encore, str_replace peut même prendre un tableau en argument :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = str_replace( array( '!', '?', ';', ':' ), '', $chaine );

Discussions similaires

  1. Comment traiter les caractères accentués de mon store ?
    Par altair8080 dans le forum Ext JS / Sencha
    Réponses: 4
    Dernier message: 25/07/2012, 21h25
  2. caractères accentués non reconnus dans une JTable
    Par nf1624 dans le forum Composants
    Réponses: 6
    Dernier message: 21/08/2009, 16h11
  3. Réponses: 3
    Dernier message: 21/08/2009, 15h33
  4. Réponses: 4
    Dernier message: 06/05/2008, 19h59
  5. Lire les caractères un par un d'une chaîne unicode
    Par vanbesienv dans le forum Général Python
    Réponses: 4
    Dernier message: 09/03/2008, 14h09

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