Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/01/2011, 14h34   #1
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 48
Points : 26
Points : 26
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 :
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.
nasuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 14h36   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
rajoute l'option u (PCRE8)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h01   #3
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 48
Points : 26
Points : 26
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
nasuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h07   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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 :
echo preg_replace('/\P{Xan}/u', '', 'exemple avec accent é et ø');
EDIT : autant faire ca ducoup

Code :
echo preg_replace('/\s/', '', 'exemple avec accent é et ø');
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h23   #5
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 48
Points : 26
Points : 26
Je te remerci beaucoup !

Code :
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.
nasuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h25   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par nasuu Voir le message
Je te remerci beaucoup !

Code :
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 ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h27   #7
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 48
Points : 26
Points : 26
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).
nasuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h33   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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 ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h42   #9
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 48
Points : 26
Points : 26
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 ?
nasuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h50   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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 :
Citation:
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h56   #11
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 48
Points : 26
Points : 26
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.
nasuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 16h04   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
en ASCII y'a que 128 caractères, un é c'est pas un caractère ascii
http://en.wikipedia.org/wiki/ASCII
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 16h23   #13
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 48
Points : 26
Points : 26
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]
nasuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 16h34   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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 :
preg_replace('/[\x0A\x20-\x7E\xA0-\xFF]/', '', $value);
après pourquoi tu veux supprimer les caractère invisible ? quel est le but final ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 16h44   #15
Nouveau Membre du Club
 
Inscription : décembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 48
Points : 26
Points : 26
Je voulais nettoyer un texte de caractère inutile. Je te remercie d'avoir passé du temps à m'aider.
nasuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 16h46   #16
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h52.


 
 
 
 
Partenaires

Hébergement Web