Définition du codage des caractères dans le formulaire submit pour Internet Explorer

J’ai une page qui contient un formulaire. Cette page est servie avec le type de contenu text / html; charset = utf-8. Je dois soumettre ce formulaire au serveur en utilisant le codage de caractères ISO-8859-1. Est-ce possible avec Internet Explorer?

Définir l’atsortingbut accept-charset pour former un élément, comme ceci, fonctionne pour Firefox, Opera, etc. mais pas pour IE.

...

Edit: Ce formulaire est créé par le serveur A et sera soumis au serveur B. Je n’ai aucun contrôle sur le serveur B.

Si je mets le serveur A à la disposition du contenu avec le jeu de caractères ISO-8859-1, tout fonctionne, mais je cherche un moyen de le faire fonctionner sans modifier le codage du serveur A. J’ai une autre question sur la définition de l’encodage dans le serveur A.

Il y a un simple hack à ceci:

Insérez un champ de saisie masqué dans le formulaire avec une entité qui apparaît uniquement dans le jeu de caractères que le serveur de votre publication (ou GET) accepte.

Exemple: Si le formulaire se trouve sur un serveur desservant ISO-8859-1 et que le formulaire sera envoyé à un serveur qui attend UTF-8, insérez-le dans le formulaire:

  

IE détectera alors que le formulaire contient un caractère UTF-8 et utilise UTF-8 lorsque vous POST ou GET. Étrange, mais ça marche.

Avec des navigateurs décents:

 

Avec IE (any):

 document.charset = 'ISO-8859-1'; // do this before submitting your non-utf8 
!

Il semble que cela ne soit pas possible, du moins avec les versions actuelles d’IE (6 et 7).

IE prend en charge l’atsortingbut de formulaire accept-charset, mais seulement si sa valeur est «utf-8».

La solution consiste à modifier le serveur A pour produire l’encodage «ISO-8859-1» pour la page contenant le formulaire.

J’ai le même problème ici. J’ai besoin d’une page UTF-8 pour publier sur un serveur ISO-8859-1.

On dirait que IE ne peut pas gérer ISO-8859-1. Mais il peut gérer ISO-8859-15.

 
...

Donc, cela a fonctionné pour moi, puisque ISO-8859-1 et ISO-8859-15 sont presque les mêmes.

Si vous avez un access au serveur, convertissez-le en UTF-8. L’art de soumettre des formulaires non UTF-8 est une histoire longue et désolée. Ce document sur les formulaires et i18n peut être intéressant. Je comprends que vous ne semblez pas vous soucier du soutien international; vous pouvez toujours convertir les données UTF-8 en entités HTML pour vous assurer qu’il rest Latin-1.

Je viens juste d’avoir le même problème et j’ai une solution relativement simple qui ne nécessite aucun changement dans le codage des caractères de la page (ce qui est douloureux).

Par exemple, votre site se trouve dans utf-8 et vous souhaitez publier un formulaire sur un site dans iso-8859-1. Changez simplement l’action du message sur une page de votre site qui convertira les valeurs postées d’utf-8 en iso-8859-1.

cela pourrait être fait facilement en php avec quelque chose comme ceci:

 $value) { $params[] = $key."=".rawurlencode(utf8_decode($value)); } $params = implode("&",$params); //then you redirect to the final page in iso-8859-1 ?> 

Pour les symboles russes ‘windows-1251’

 
...

Quand simplement convertir la chaîne en cp1251

 $ssortingng = $_POST['ssortingng']; $ssortingng = mb_convert_encoding($ssortingng, "CP1251", "UTF-8"); 

Je suis presque certain que ce ne sera pas possible avec les anciennes versions d’IE. Avant que l’atsortingbut accept-charset soit conçu, il n’existait aucun moyen pour les éléments de form de spécifier le codage de caractère qu’ils acceptaient, et le mieux que les navigateurs pouvaient faire était de supposer que l’encodage de la page contiendrait le formulaire.

Il est un peu sortingste que vous ayez besoin de savoir quel encodage a été utilisé – de nos jours, nos frameworks Web prendront en charge ces détails de manière invisible et exposeront les données texte à l’application comme des chaînes Unicode, déjà décodées …

On dirait que Microsoft sait accepter-charset , mais leur doc ne dit pas pour quelle version il commence à fonctionner …
Vous ne dites pas non plus dans quelles versions du navigateur vous l’avez testé.

Je pense que Internet Explorer est confus si le codage accept-charset ne correspond pas au codage spécifié dans l’en-tête content-type. Dans votre exemple, vous affirmez que le document est envoyé en tant que UTF-8, mais que vous souhaitez que le formulaire soit soumis dans ISO-8859-1. Essayez de les faire correspondre et voyez si cela résout votre problème.