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 :

Nettoyer une chaîne de caractères


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Par défaut Nettoyer une chaîne de caractères
    Bonjour,

    J'essaye de nettoyer une chaîne, tout ce qui à moins de deux caractère out... par contre et je sais pas pourquoi, il ne tient pas compte de tous les mots de moins de deux caractères comme des à, â où, etc...
    Par contre, je ne souhaite pas qu'un mot du genre âgé se voit amputé du â

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $keywordsy = "à la gare de düsseldorf en allemagne, c'est pas là !";
     
    // Nettoyer la chaine
    while(preg_match("# ([[:alnum:]]{1,2}) #", $keywordsy))
    $keywordsy =  preg_replace("#( [[:alnum:]]{1,2} )#iu", " ", $keywordsy);
     
    echo $keywordsy;
    Il m'affiche ceci : à gare düsseldorf allemagne, c'est pas !

    Alors que j'aimerais ceci : gare düsseldorf allemagne, est pas !

    Pourquoi le à n'est pas supprimé et ni le c' ?

    Comment corriger pour y arriver ?

    D'avance merci
    Yule

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Essaie ça. C'est sûrement optimisable (je ne suis pas un Dieu en regexp)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $keywordsy = "à la gare de düsseldorf en allemagne, c'est pas là dell'aquila. Tu l'as dit bouffi ! Oui je l'avais dit";
    print "$keywordsy<br/>";
    $caractères  = "[a-z0-9àáâãäåçèéêëìíîïðòóôõöùúûüýÿA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÒÓÔÕÖÙÚÛÜÝŸ]";
    $caractères2 = "[a-z0-9àáâãäåçèéêëìíîïðòóôõöùúûüýÿA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÒÓÔÕÖÙÚÛÜÝŸ\s]";
    //======  Suppression des mots : pas précédé par un caractère suivi de 1 ou 2 caractères pas suivi par un caractère
    $keywordsy   =  preg_replace("#(?<!$caractères)($caractères{1,2})(?!$caractères)#ium", " ", $keywordsy);
    //======  Suppression des apostrophes : pas précédé par un caractère suivi d'une apostrohe suivie par un caractère2
    $keywordsy   =  preg_replace("#(?<!$caractères)(\')(?=$caractères2)#ium", " ", $keywordsy);
    echo $keywordsy;

  3. #3
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Attention le code dans Visualiser dans une fenêtre à part n'est pas le même que celui dans le fil.


    Visualiser dans une fenêtre à part :

    Nom : 170315-001.JPG
Affichages : 352
Taille : 55,8 Ko


    Code dans la discussion :

    Nom : 170315-002.JPG
Affichages : 393
Taille : 54,4 Ko

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu confonds nombre de caractères et nombre d'octets (nécessaires par caractère).
    En l'occurrence, les caractères accentués sont sur plusieurs octets.

    Il faut utiliser les Fonctions sur les chaînes de caractères multi-octets

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    A qui réponds-tu ? Si c'est à moi, je voulais seulement indiquer une différence dans le rendu du code.

    Pour ce qui est des caractères accentués, le code que j'ai posté fonctionne bien avec.


    à la gare de düsseldorf en allemagne, c'est pas là dell'aquila. Tu l'as dit bouffi ! Oui je l'avais dit âgé ÙÚ ÙÚÙ
    donne

    gare düsseldorf allemagne, est pas dell'aquila. dit bouffi ! Oui avais dit âgé ÙÚÙ

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je répondais et expliquais le pourquoi de ça :
    Pourquoi le à n'est pas supprimé ?
    Tant à ton code (pas testé), il ne prend pas en compte TOUS les caractères multi-octets (cyrilliques, asiatiques,...).

    Les fonctions dont je parle, si.

Discussions similaires

  1. [Turbo Pascal] Fonction qui permet de nettoyer une chaîne de caractères
    Par med.ycf dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 05/03/2014, 23h11
  2. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  3. [Debutant(e)] Analyse d'une chaîne de caractères
    Par maire106 dans le forum Langage
    Réponses: 6
    Dernier message: 22/03/2004, 15h04
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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