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:
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>
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
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>
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:
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:
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>
et le résultat pour "futé" devient:
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
J'observe les résultats suivants:
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