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 17/11/2010, 15h39   #1
Membre régulier
 
Inscription : mai 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 180
Points : 82
Points : 82
Par défaut Caractères accentués sous Lamp

Hello amis développeurs !

Code :
1
2
3
4
5
6
7
8
9
10
11
12
function autoriser_caractere_avec_accent($arg_str)
{
	if(!setlocale(LC_ALL,array('fra','FR','fr_FR','fr_FR@euro','fr_FR.UTF8', 'fr.UTF8', 'fr_FR.UTF-8', 'fr.UTF-8'))) error_log('set_local failed');
	if(preg_match('/[^[:alpha:]]/u',$arg_str)) return false;
 	return true;
}
 
if(autoriser_caractere_avec_accent('marcel')) echo ' marcel accepté ';
else echo ' marcel refusé ';
echo '-';
if(autoriser_caractere_avec_accent('rené')) echo ' rené accepté ';
else echo ' rené refusé ';
sur mon Wampserver (APACHE2.2.11-PHP5.3.0) :
marcel accepté - rené accepté

sur mon Lamp ubuntu (APACHE2.2.14-PHP5.3.2)
marcel accepté - rené refusé

Grace à vos aides, tous les Renés vous remercieront !
gomodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 16h04   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Essaie comme ça pour voir :
Code :
if(preg_match('/[^\\w]/u',$arg_str)) return false;
J'ai lu des cas ou ca fonctionnait.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 16h11   #3
Modérateur
 
Inscription : septembre 2010
Messages : 6 983
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 6 983
Points : 8 289
Points : 8 289
ouai et pourquoi faire l'inverse d'ailleurs autant faire juste
Code :
1
2
3
4
function autoriser_caractere_avec_accent($arg_str)
{		
    return preg_match('/\w/u', $arg_str);
}
et pcre ne dépend pas de la locale.
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 16h14   #4
Membre régulier
 
Inscription : mai 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 180
Points : 82
Points : 82
Merci sabotage, je viens d'essayer mais j'ai strictement le même résultat.
gomodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 16h29   #5
Membre régulier
 
Inscription : mai 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 180
Points : 82
Points : 82
Citation:
Envoyé par stealth35 Voir le message
ouai et pourquoi faire l'inverse d'ailleurs autant faire juste
Code :
1
2
3
4
function autoriser_caractere_avec_accent($arg_str)
{		
    return preg_match('/\w/u', $arg_str);
}
et pcre ne dépend pas de la locale.
Simplement parce que ce pas équivalent.
Par exemple ton code autorise marcel2, pas le miens..

par contre tu pense que pcre ne dépend pas de la locale ?
gomodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 16h37   #6
Modérateur
 
Inscription : septembre 2010
Messages : 6 983
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 6 983
Points : 8 289
Points : 8 289
comme ca alors

Code :
1
2
3
4
function test($str)
{		
    return !preg_match('/\P{L}/u', $str);
}
Citation:
par contre tu pense que pcre ne dépend pas de la locale ?
fait quelques tests tu verras
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/11/2010, 17h00   #7
Membre régulier
 
Inscription : mai 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 180
Points : 82
Points : 82
Citation:
Envoyé par stealth35 Voir le message
fait quelques tests tu verras
Merci, effectivement ça marche sans setlocale, et ton code (plus court que le mien) marche aussi sur LAMP .

OUI MAIS ça craint quand même : va falloir que je convertisse toutes mes expressions rationnelle utilisant "alnum" et "alpha" ...

ET je ne comprend pas bien : Dois-je comprendre que la doc officielle PHP http://www.php.net/manual/fr/regexp....er-classes.php concernant les classes de caractères PCRE ne fonctionne pas avec les caractères accentués ?
gomodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 17h13   #8
Modérateur
 
Inscription : septembre 2010
Messages : 6 983
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 6 983
Points : 8 289
Points : 8 289
si tu parles de cette phrase la

Citation:
En mode UTF-8, les caractères dont les valeurs sont supérieures à 128 ne seront trouvés par aucune des classes de caractères POSIX.
Enfaite ca devrait pas le faire. avec la derniere version de PCRE (8.10) qui sera inclus dans la prochaine version de php (5.3.4), y'a une nouvelle option pour activer ca c'est PCRE_UCP.
C'est pour ca que je déconseille d'utiliser les classes POSIX avec les PCRE, sous PCRE autant utilisé les classes PCRE c'est fait pour

si tu veux la correpondance c'est

Code :
1
2
3
4
5
6
7
8
[:alnum:]   ->  \p{Xan}
[:alpha:]   ->  \p{L}
[:blank:]   ->  \h
[:digit:]   ->  \p{Nd}
[:lower:]   ->  \p{Ll}
[:space:]   ->  \p{Xps}
[:upper:]   ->  \p{Lu}
[:word:]    ->  \p{Xwd}
http://www.pcre.org/pcre.txt

parce contre je t'ai dis une bêtise les classes PCRE sont aussi suivant la locale, comme les POSIX, (biensure \p{L} n'est pas conserner, mais \w l'est)
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h40.


 
 
 
 
Partenaires

Hébergement Web