web-dev-qa-db-fra.com

Comment définir le "jeu de caractères Content-Type ..." dans l'en-tête de la demande à l'aide d'un lien HTML

J'ai une simple page HTML avec un lien encodé en UTF-8.

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <a charset='UTF-8' href='http://server/search?q=%C3%BC'>search for "ü"</a>
  </body>
</html>

Cependant, je n'obtiens pas le navigateur pour inclure Content-Type:application/x-www-form-urlencoded; charset=utf-8 Dans l'en-tête de demande. Par conséquent, je dois configurer le serveur Web pour supposer que toutes les demandes sont encodées en UTF-8 (URIEncoding = "UTF-8" dans Tomcat server.xml). Mais bien sûr, l'administrateur ne me laisse pas faire cela dans l'environnement de production (Websphere).

Je sais que c'est assez facile à réaliser en utilisant Ajax, mais comment puis-je contrôler l'en-tête de la demande lorsque j'utilise des liens HTML standard? L'attribut charset ne semble pas fonctionner pour moi (testé dans IE8 et FF 3.5)

La deuxième partie de la solution requise serait de définir le codage de l'URL lors de la modification du document.location D'un IFrame à l'aide de Javascript.

19
HAL 9000

Ce n'est pas possible à partir de HTML. Le plus proche que vous pouvez obtenir est le accept-charset attribut de <form>. Seul le navigateur MSIE adhère à cela, mais même alors, il le fait mal (par exemple CP1252 est en fait a été utilisé quand il dit qu'il a envoyé ISO-8859-1). Les autres navigateurs l'ignorent complètement et utilisent le jeu de caractères spécifié dans Content-Type en-tête de la réponse. La définition du bon codage des caractères est fondamentalement entièrement la responsabilité du côté serveur. Le côté client doit simplement le renvoyer dans le même jeu de caractères que le serveur a envoyé la réponse.

Au point, vous devez vraiment configurer les choses d'encodage de caractères entièrement du côté serveur. Pour surmonter l'impossibilité de modifier l'attribut URIEncoding, quelqu'un ici sur SO a écrit un filtre (complexe): Détecte automatiquement le codage URI dans Tomcat . Vous peut également le trouver utile (remarque: je ne l'ai pas testé).


Mise à jour : Il convient de noter que la balise META donnée dans votre question est ignorée lorsque le contenu est transféré via HTTP. Au lieu de cela, la réponse HTTP Content-Type l'en-tête sera utilisé pour déterminer le type de contenu et l'encodage des caractères. Vous pouvez déterminer l'en-tête HTTP avec par exemple Firebug , dans le panneau Net.

alt text

20
BalusC