Page 1 sur 1

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

Posté : 30 oct. 2008, 13:34
par Mr.Pink
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:

Posté : 30 oct. 2008, 15:38
par mere-teresa
et en remplaçant par [A-za-z] ?

Et avec l'option u ?
http://fr2.php.net/manual/fr/reference. ... ifiers.php

Posté : 30 oct. 2008, 17:18
par Mr.Pink
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'; 
?>