Bonjour à tous (et meilleurs voeux pour l'année 2010 !!)
Je propose à votre sagacité les essais suivants que j'ai effectués après avoir lu quelques post sur ce forum et consulté des tutos à ce sujet mais sans vraiment trouver la réponse.
Donc voici le problème: J'envoie à partir d'un formulaire (method post) un textarea représentant une phrase type news donc je voudrais que les accents et ponctuations soient autorisés.
Voici les deux codes
Le formulaire:
La page de verif:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Mon forum</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="fr" /> </head> <body> <form action = "verif.php" method="post"> <textarea name="phrase" col="50" rows="5"></textarea> <input type="submit" name="envoyer" value="envoyer" /> </form> </body> </html>
Les deux pages sont codées en UTF-8. Mais les résultats suivants s'affichent lorsque j'envoie le mot "futé" dans le textarea:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Mon forum</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="fr" /> </head> <body> <?php $texte = $_REQUEST['phrase']; $comp = "/^[a-zA-Z0-9 éèàçâêîôû\'\.;:,!-\?]+$/"; echo $texte."<br />".$comp."<br />".preg_match($comp,$texte); ?> </body> </html>
futé // le mot futé est bien reçu
/^[a-zA-Z0-9 ���������\'\.;:,!-\?]+$/ // la variable $comp de comparaison ne s'affiche pas correctement !!??
0 // et plus fort le résultat du test est 0 alors que futé ne comporte pas de caractère interdit
Je me suis dit que puisque $comp n'était pas affiché correctement le problème venait peut être de lui. J'ai donc codé $comp en utf-8 avant le test.
verif.php devient:
et le résultat pour "futé" devient:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Mon forum</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="fr" /> </head> <body> <?php $texte = $_REQUEST['phrase']; $comp = "/^[a-zA-Z0-9 éèàçâêîôû\'\.;:,!-\?]+$/"; $comp = utf8_encode($comp); echo $texte."<br />".$comp."<br />".preg_match($comp,$texte); ?> </body> </html>
futé
/^[a-zA-Z0-9 éèàçâêîôû\'\.;:,!-\?]+$/
1
Cette fois $comp s'affiche correctement et le résultat du test est ok.
Je suppose que c'est parce que PHP est configuré par défaut en ISO-8859-1 que l'on observe ces résultat et la nécessité de coder en UTF-8 la variable $comp ? Faut-il systématiquement codé les variables de comparaison lorsqu'il y a des accents dans les textes à comparer ? Ou y a-t-il une autre explications ?
Je me suis amusé à faire ces deux mêmes essais avec les deux pages codées en ISO-8859-1 en modifiant la ligne suivante dans chaque page:
J'observe les résultats suivants:
Code : Sélectionner tout - Visualiser dans une fenêtre à part <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
avec $comp non codé UTF-8:
futé
/^[a-zA-Z0-9 éèàçâêîôû\'\.;:,!-\?]+$/
0
avec $comp codé en UTF-8
futé
/^[a-zA-Z0-9 éèà çâêîôû\'\.;:,!-\?]+$/
1
Les résultats des tests sont les mêmes mais les affichages ne sont pas compris par les navigateurs puisque eux attendent de l'ISO-8859-1.
En conclusion j'ai du mal à comprendre pourquoi le textarea semble toujours envoyer de l'UTF-8 puisque si je code pas $comp dans ce format la comparaison ne fonctionne pas et cela indépendamment du codage de la page. Bref je patauge ....
Quelqu'un a-t-il une explication plus académique à me proposer ?
A bientôt![]()
Partager