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 :

preg_replace et [^[:graph:]]


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut preg_replace et [^[:graph:]]
    Bonjour,

    Le problème :

    Normalement cette action devrait supprimer que caractères invisibles (et les caractères qui ne sont pas ascii ? ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace("#[^[:graph:]]#", '', 'exemple avec accent é et ø');
    Sous Windows j'obtiens :"exempleavecaccentéetø'"
    Sous Mac ou Linux : "exempleavecaccentet'"

    Mes tentatives :
    J'ai essayé plusieurs versions de php (php 5, php 5.2.x, 5.3.5), de changer l'encodage de la page (iso-8859-1, UTF-8 etc..) sous différent logiciel (eclips, dreaweaver, coda).
    J'ai essayé tout ceci sur Mac, Linux et windows xp.

    Le problème reste le même, j'ai l'impression de ne plus avancer malgré de nombreuse recherche sur Google. Je me tourne donc vers vous afin d'être guidé vers la bonne recherche à effectuer, car vraisemblablement je ne cherche pas la bonne chose.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    rajoute l'option u (PCRE8)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    rajoute l'option u (PCRE8)
    J'ai essayé ce que tu m'as dit sous Linux, Windows et Mac. Ça corrige bien le problème sur Linux (ce qui est le plus important pour moi) mais quand je suis sur le Mac la chaine retournée est vide.

    Edit :
    MAC os x 10.6.5 j'utilise MAMP php 5.3.2 et 5.2.13

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par nasuu Voir le message
    J'ai essayé ce que tu m'as dit sous Linux, Windows et Mac. Ça corrige bien le problème sur Linux (ce qui est le plus important pour moi) mais quand je suis sur le Mac la chaine retournée est vide.

    Edit :
    MAC os x 10.6.5 j'utilise MAMP php 5.3.2 et 5.2.13
    et si tu fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace('/\P{Xan}/u', '', 'exemple avec accent é et ø');
    EDIT : autant faire ca ducoup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace('/\s/', '', 'exemple avec accent é et ø');

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    Je te remerci beaucoup !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace("#(?![ \n])[^[:graph:]]#S", '', $value);
    J'utiliser ceci, mais je me suis rendu compte après coup qu'il supprimer des caractères valides en iso-8859-1.
    Le problème semble résolu sur tous les confins. Encore merci.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par nasuu Voir le message
    Je te remerci beaucoup !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace("#(?![ \n])[^[:graph:]]#S", '', $value);
    J'utiliser ceci, mais je me suis rendu compte après coup qu'il supprimer des caractères valides en iso-8859-1.
    Le problème semble résolu sur tous les confins. Encore merci.
    tu peux le simplifier ton expression, tu veux juste supprimer les espaces non ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    Non justement, je souhaite supprimer tous les caractères invisibles sauf les espaces et sauts de ligne \n (et non \r). Mais si l'on peut simplifier, je suis preneur.

    edit : je ne suis pas pro du tout en expression régulière, mais si j'ai bien compris ce que j'ai fais ca ce traduit par.
    Si le caractère suivant n'est pas un espace ou \n et que c'est un caractère invisible on remplace par '' (du vide).

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par nasuu Voir le message
    Non justement, je souhaite supprimer tous les caractères invisibles sauf les espaces et sauts de ligne \n (et non \r). Mais si l'on peut simplifier, je suis preneur.

    edit : je ne suis pas pro du tout en expression régulière, mais si j'ai bien compris ce que j'ai fais ca ce traduit par.
    Si le caractère suivant n'est pas un espace ou \n et que c'est un caractère invisible on remplace par '' (du vide).
    exempleavecaccentéetø
    ici il a supprimer les espaces...

    EDIT : et pourquoi avoir mis l'option S ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    Le faite de mettre l'option S sur mes expressions régulières qui ne sont pas délimiter je me suis rendu compte que sa à énormément réduit la vitesse modification.

    Je crois que je m'en sors vraiment pas sur le coup, une idée ?

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par nasuu Voir le message
    Le faite de mettre l'option S sur mes expressions régulières qui ne sont pas délimiter je me suis rendu compte que sa à énormément réduit la vitesse modification.

    Je crois que je m'en sors vraiment pas sur le coup, une idée ?

    dument que ca marche c'est bien, mais ton explication est contradition avec ton exemple :
    je souhaite supprimer tous les caractères invisibles sauf les espaces et sauts de ligne \n (et non \r)
    en gros tu supprimes rien de visible a par le \r

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    En faite je souhaitais tout simplement supprimer dans une chaine tous les caractères non ascii et les caractères invisibles. Je ne sais pas jusqu'au combien de caractères la table ascii vas, mais elle ne se fini pas à \x7E
    Tout en gardant l'espace et \n [ \n]

    L'option [:graph:] me sembler bonne mis à part qu'apparemment sous Windows XP elles prend en compte tous les caractères ASCII et sous mac et linux elle sembler être [\x21-\x7E]. Je ne comprends pas vraiment pourquoi.

    une chaine : "un exemple \n une nouvelle ligne \t tabulation"
    devrais retourné "un exemple \n une nouvelle ligne tabulation".

    Si on y ajouter un caractère japonais par exemple, qui n'est normalement existant dans une table ascii devrait être supprimer puisqu'il est sensé être invisible.

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    en ASCII y'a que 128 caractères, un é c'est pas un caractère ascii
    http://en.wikipedia.org/wiki/ASCII

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    Je te remerci même si comme ca ca n'en pas l'air, ta réponse m'a beaucoup aider. J'ai essayer de comprendre à quoi correspondé l'Hex dans le preg_match et j'ai compris qu'il correspond au charset de la page j'imagine (donc dans mon cas ISO-8859-1).

    http://fr.wikipedia.org/wiki/ISO_8859-1

    Donc si je prend du \x21 au caractère ~ puis de ¡ à ÿ. J'aurais donc que des caractère iso-8859-1 visible ? [\x21-7E\xA1-\xFF]

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par nasuu Voir le message
    Je te remerci même si comme ca ca n'en pas l'air, ta réponse m'a beaucoup aider. J'ai essayer de comprendre à quoi correspondé l'Hex dans le preg_match et j'ai compris qu'il correspond au charset de la page j'imagine (donc dans mon cas ISO-8859-1).

    http://fr.wikipedia.org/wiki/ISO_8859-1

    Donc si je prend du \x21 au caractère ~ puis de ¡ à ÿ. J'aurais donc que des caractère iso-8859-1 visible ? [\x21-7E\xA1-\xFF]
    ouai essaye comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace('/[\x0A\x20-\x7E\xA0-\xFF]/', '', $value);
    après pourquoi tu veux supprimer les caractère invisible ? quel est le but final ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    Je voulais nettoyer un texte de caractère inutile. Je te remercie d'avoir passé du temps à m'aider.

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par nasuu Voir le message
    Je voulais nettoyer un texte de caractère inutile. Je te remercie d'avoir passé du temps à m'aider.
    essaye ce que je t'ai mis

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

Discussions similaires

  1. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  2. [Turbo Pascal] [Windows XP] Problème avec l'unité GRAPH
    Par themofleur dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 29/03/2003, 22h43
  3. Perl & Graphes
    Par makram9999 dans le forum Modules
    Réponses: 4
    Dernier message: 24/03/2003, 11h24
  4. [] [Excel] Exporter un graphe MSChart vers Excel
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 17h49
  5. Concerne les graphes
    Par mcr dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 12/11/2002, 11h02

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