Dans un formulaire HTML, à moins de le forcer via l'attribut
accept-charset de la balise form, le navigateur envoit les données
dans le même charset que la page. Du coup si la page est en UTF-8 les données
sont envoyées en UTF-8. Ce qui après tout est le but. Encore faut-il que le
serveur d'application sache lire les données, je pense notamment à Tomcat
& JBoss.
Dans le cas d'un GET. Le fameux paramètre URIEncoding=UTF-8,
permet de s'en tirer et d'interpréter correctement les données en URL. Lors du
POST d'un formulaire url-encoded, le navigateur ne précise pas le charset et
les données sont dans le corps. Du coup le serveur d'application ne sachant pas
quoi faire tombe dans son comportement par défaut. Dans le cas de JBoss, il
décode les données du formulaire en ISO-8859-1. Et là, c'est le drame.
Une petite astuce à faire au niveau d'Apache, il suffit de surcharger l'en-tête du type de contenu:
SetEnvIf Content-Type "application/x-www-form-urlencoded" utf8_form=true RequestHeader set Content-Type "application/x-www-form-urlencoded; charset=UTF-8" env=utf8_form
Et voilà, plus de problème, JBoss interprète correctement le charset.

