Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
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 21/06/2007, 22h15   #1
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 30
Points : 17
Points : 17
Par défaut regex majuscule avec accent

bonsoir à tous
j'utilise cette expression regulière :
Code :
1
2
	if(!preg_match_all('`(sch[eéÉ]ma)`isU', $contenu_sans_balises , $out) )
	{	$blacklist = '1';		}
Seulement si ma variable "$contenu_sans_balises" contient un "É" (E majuscule avec accent), la regex me renvoie "FALSE" bien que ce caractère soit spécifié dans ma fonction.

EDIT: je précise pour les puristes qui me feront remarquer que j'ai mis un ! devant ma fonction que je souhaite que $blacklist = '1' si le mot schéma n'est pas dans mon contenu

Auriez vous une idée de ce qui ne va pas dans mon code?

merci à tous.
zobsystem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2007, 22h50   #2
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 30
Points : 17
Points : 17
peut être qu'il faudrait que j'ajoute l'option u (minuscule)?
quelqu'un peut confirmer ou m'aiguiller ?
zobsystem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 09h38   #3
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
un petit morceau de code que j'aime bien et qui pourrait aider :

Code :
1
2
3
$string = htmlentities($string);
$string = preg_replace('#&(.)(uml);#', '$1e', $string);
$string = preg_replace('#&(.)(acute|cedil|circ|ring|tilde|uml|grave);#', '$1', $string);
Cela permet tout simplement de... supprimer les accents de la chaine string d'une maniere que je trouve tres elegante !

Tu n'a plus qu'a faire ta regex sans avoir a gerer les accents par la suite.
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 14h54   #4
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 30
Points : 17
Points : 17
très bien , malgrès que ça ne resolve pas mon problème par la méthode du preg_match_all, ça fonctionnera (3 fonction de plus pour faire ce que devrait faire une seule).
si quelqu'un à un élément de solution pour la méthode que j'utilise, je suis preneur. Pourquoi mon E accentué n'est pas reconnu par ma regex?
zobsystem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 16h21   #5
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Pour répondre plus spécifiquement a ton probleme, c'est a cause des format de caracteres utilisés.

Le É qui est dans ton fichier correspond a l'encodage du fichier php le contenant et le É que tu compares dans ta chaine correspond a l'encodage utilisé par le navigateur, eventuellement transformé entre temps par PHP ou d'autres intervenant dans un autre encodage... bref, c'est le bordel ;o)

Une solution est d'attendre PHP6 qui uniformisera tout en utf-8
Une autre solution est de chercher a maitriser de bout en bout le type d'encodage utilisé (mais c'est super chaud)
Une derniere solution consiste a faire cela :

Code :
1
2
3
if(!preg_match_all('`(sch[e|&egrave;|&Egrave;]ma)`isU', htmlentities($contenu_sans_balises) , $out) ) {
	    $blacklist = '1';		
}
là tu n'a qu'une seule regex et il y a des chances que ca fonctionne (meme si ce n'est pas aussi générique que la précédente solution ;o)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 16h29   #6
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 30
Points : 17
Points : 17
je comprend. merci pour vos réponses.
Ce que je n'avais pas compris c'est la transformation é... en &eacute... selon les cas.
C'etait effectivement ça qui me posait problème.
zobsystem 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 03h18.


 
 
 
 
Partenaires

Hébergement Web