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 13/06/2011, 10h08   #1
Membre à l'essai
 
Développeur Web
Inscription : octobre 2010
Messages : 55
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2010
Messages : 55
Points : 21
Points : 21
Par défaut :alpha: ne reconnait pas les accents ?

Bonjour tous,
je me heurte à un problème de reconnaissance de caractère spécial.
Mon code est
Code :
1
2
3
$t = '1 séquence 2';
preg_match("/(?<c>\d{0,1})(\W*)(?<m>[[:alpha:]]+)(\W*)(?<b>\d{0,3})/i", $t, $regs);
print_r($regs);
mais au lieu de me mettre 'séquence' dans la variable $m, il met que 's' et met le 'é' dans le masque d'après correspondant à "tout sauf chiffres et lettres" !
Code :
Array ( [0] => 1[c] => 1 [1] => 1 [2] => [m] => s [3] => s [4] => é [b] => [5] => )
mes pages sont en ISO-8859-1.
Auriez-vous une idée pour régler ce problème ?

Merci
Titum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 11h19   #2
Membre à l'essai
 
Développeur Web
Inscription : octobre 2010
Messages : 55
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2010
Messages : 55
Points : 21
Points : 21
en fait je reçois la variable par formulaire, envoyée par get ou post ou bien écrit direct dans le script ne change rien.

Passer $t par urldecode, html_entity_decode ou htmlspecialchars_decode ne change rien.

Et changer
Citation:
[[:alpha:]] par [a-zàáâãäçèéêëìíîïñòóôõöùúûü]
ne change rien parce que si le caractère accentué est le premier, il se retrouve dans $regs[2] (le 1er \W*)
Titum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 10h24   #3
Membre à l'essai
 
Développeur Web
Inscription : octobre 2010
Messages : 55
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2010
Messages : 55
Points : 21
Points : 21
en attendant votre aide je cherche toujours...
J'ai lu qu'il fallait le bon jeu de caractère. La page est déjà envoyée en ISO-8859-1 mais j'ai quand même ajouté
Code :
setlocale(LC_ALL, 'fr_FR.ISO-8859-1');
ou fr_FR tout seul, mais ça ne fonctionne pas non plus.
Titum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 10h28   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
utilise l'option u
en pcre la classe :alpha: c'est \p{Xan}


ps : ton option i est inutile
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h12   #5
Membre à l'essai
 
Développeur Web
Inscription : octobre 2010
Messages : 55
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2010
Messages : 55
Points : 21
Points : 21

OK CA MARCHE !
Code :
setlocale(LC_CTYPE, 'fra_FRA');
Une fois la ligne mise lancée dans un fichier, PHP garde le paramètre pour toute la session.
fr-FR, fr_FR, ISO-8859-1... tout ça ne marche pas chez moi, par contre chez mon hébergeur canadien, fra_FRA ne marche pas, il faut fr_FR

Si on décommente
Code :
default_charset = "iso-8859-1"
dans php.ini ça ne résout pas le problème.
Pourtant tout est en 'fr' et en iso-8859-1 dans la config !
Titum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h14   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
faillait juste utiliser l'option u, pas besoin de bidouiller avec les locales et le charset
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h36   #7
Membre à l'essai
 
Développeur Web
Inscription : octobre 2010
Messages : 55
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2010
Messages : 55
Points : 21
Points : 21
J'avais mis i parce qu'à un moment donné j'avais remplacé :alpha: par a-zéèàç... et je l'ai enlevé, merci.

J'ai remplacé le :alpha: par \p{Xan} mais chez mon hébergeur (PHP 5.2.9) j'ai l'erreur
Code :
Warning: preg_match() [function.preg-match]: Compilation failed: unknown property name after \P or \p at offset 35 in...
L'option u ne trouve rien dès que j'ai des accents en utilisant :alpha:, \p{Xan} ou \w.

Le problème est que la parenthèse capturante (\W*) avant la parenthèse pour mon mot capte la 1ere lettre du mot si elle est accentuée. Par exemple chercher '1 ézékiel 2' donne
Code :
$reg[2] = ' é' et $reg[m]=zékiel
avec \p{Xan} et rien avec \w.
Y a-t-il une solution pour retirer les accents de la 1ère (\W*) ?
Titum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h39   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
laisse tombé pour le Xan c'est qu'a une ancienne version de PCRE (même si ça m’étonne un peu)

ton code est bien en utf-8 ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h40   #9
Membre à l'essai
 
Développeur Web
Inscription : octobre 2010
Messages : 55
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2010
Messages : 55
Points : 21
Points : 21
non, tout en iso-8859-1
Titum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h42   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Titum Voir le message
non, tout en iso-8859-1
pourquoi tu le mets pas en utf-8 t'aurai moins de problème
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h49   #11
Membre à l'essai
 
Développeur Web
Inscription : octobre 2010
Messages : 55
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2010
Messages : 55
Points : 21
Points : 21
juste parce que tout est en iso-8859-1 et que s'il faut tout transcoder c'est casse pied ! j'ai des milliers de pages et de bases de données en 8859...

Si je transcode la requête en utf8 ça va, mais les 30.000 lignes dans lesquelles je fais la requête ça va faire tourner le serveur pour pas grand chose à la place d'une petite ligne setlocale() qui semble me sauver.
Titum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h51   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pas grave, pense a faire une migration un jour ou l'autre
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 12h42   #13
Membre à l'essai
 
Développeur Web
Inscription : octobre 2010
Messages : 55
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2010
Messages : 55
Points : 21
Points : 21
ouaip ! merci pour les astuces que je saurai exploiter le moment venu
Titum 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 00h55.


 
 
 
 
Partenaires

Hébergement Web