RegExp, UTF8, accents et métaclasses ... tout un programme

Mr.Pink
Invité n'ayant pas de compte PHPfrance

30 oct. 2008, 13:34

Bonjour,

J'ai entrepris de passer un site en UTF8 (auparavant en ISO-8859-1). J'ai donc passé le serveur Apache, les BD MySQL, les fichiers PHP, les entêtes HTML en UTF8 et j'ai configuré l'extension mbstring de php pour traiter les chaines UTF8 de façon transparente.

Mais j'ai un problème avec la validation de mes formulaires et plus généralement avec les expressions régulières.

Voilà un exemple de mon problème.
<?php
//En UTF-8 cet exemple retourne FALSE		
$chaine="éléphant";
$regexp = "`^[\w]*$`";
if(preg_match($regexp,$chaine))
	echo 'TRUE';
else
	echo 'FALSE'; 
?>
Depuis que je suis en UTF8 la métaclasse [\w] n'accepte plus les accents.:evil:

J'ai essayé plusieurs setlocal mais auncun n'a marché :
setlocale(LC_ALL, 'fr.UTF-8');
setlocale(LC_ALL, 'fr.UTF8');
setlocale(LC_ALL, 'fr_FR.UTF-8');
setlocale(LC_ALL, 'fr_FR.UTF8');
Je développe sous WampServer 2.0, Apache 2.2.6, PHP 5.2.5, MySQL 5.0.45.

Une idée peut être ? :roll:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

30 oct. 2008, 15:38

et en remplaçant par [A-za-z] ?

Et avec l'option u ?
http://fr2.php.net/manual/fr/reference. ... ifiers.php
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Mr.Pink
Invité n'ayant pas de compte PHPfrance

30 oct. 2008, 17:18

Louée sois tu mere-teresa, l'option "u" a réglée mon problème !

Voilà à quoi ça ressemble avec l'option u, au cas ou d'autres auraient ce probleme :
<?php
$chaine="élephant";
$regexp = "`^[\w]*$`u";
if(preg_match($regexp,$chaine))
	echo 'TRUE';
else
	echo 'FALSE'; 
?>