2009-02-24 6 views
1

J'ai une forme html qui va faire toutes sortes de choses étranges. Cela fonctionne très bien dans Firefox. et dans la plupart des cas cela fonctionne bien dans IEIE munging pound (£) symbole

Cependant le signe sterling (£) cause des problèmes, et semble être compris dans la soumission.

Les formes est quelque chose comme ça

<form action="*MyFormAction*" accept-charset="UTF-8" method="post"> 

Je pense que je l'ai vu ce problème avant, mais ne me souviens pas la solution.

modifier, le symbole euro € fonctionne très bien

modifier 2, En fait, si je mets le symbole € avec un symbole £ il fonctionne aussi très bien. En regardant le problème si j'utilise des caractères qui ne sont pas dans la partie étendue de iso8859-1 cela fonctionne bien. Si j'utilise des charicters étendus de iso8859-1, ils se font prendre. Alors, comment puis-je faire IE utiliser le jeu de caractères que le accept-charset dit qu'il devrait?

+0

À quoi sert-il? –

+0

ils reviennent comme des carrés vides –

Répondre

6

accept-charset = "UTF-8"

ne fait pas ce que vous pensez qu'il fait (ou la norme dit qu'il fait) dans IE. Au lieu de cela, IE utilise la valeur ('UTF-8') comme une liste alternative de codages pour si un champ ne peut pas être codé en utilisant le codage par défaut habituel (qui est le même que le codage de la page).

Donc, si vous ajoutez cet attribut et votre page n'est pas déjà en UTF-8, vous pouvez être obtenir des caractères comme soit soumis la page ou le codage UTF-8, et il n'y a aucun moyen pour votre formulaire soumission lire le script pour le savoir!

Pour cette raison, vous ne devez jamais utiliser accept-charset; à la place, vous devez toujours vous assurer que la page contenant le formulaire est correctement définie comme "Content-Type: text/html; jeu de caractères = utf-8" (par en-tête HTTP et/ou < meta>). En fait, si je mets le symbole € avec un symbole £, cela fonctionne également très bien. Oui, c'est parce que '€' ne peut pas être encodé dans le codage par défaut de la page (probablement ISO-8859-1). Donc IE recourt à envoyer le champ encodé en UTF-8, ce que vous vouliez tout au long.

+0

Merci pour le commentaire clarifiant ce qui se passait. Est plus ou moins ce que je pensais mais agréable de le voir expliqué. –

0

Comment le £ est-il envoyé? Si c'est dans une zone de saisie pour un prix, ne le soumettez pas, n'autorisez que les numéros à soumettre et ajoutez le £ lorsque vous affichez à nouveau le prix. Ou ajoutez le symbole monétaire dans le script backend.

+0

C'est un texte libre pour commetns. –

+0

ah, ressemble à un problème d'encodage alors. –

0

Je ne suis pas sûr que cela vous aidera (lire l'article à http://fyneworks.blogspot.com/2008/06/british-pound-sign-encoding-revisited.html)

Extrait:

LE PROBLÈME Si vous regardez le UTF-8/Latin-1 (AKA ISO -8859-1) Table des caractères, vous trouverez que le code décimal pour la livre sterling sterling signe est 163 - et le code hexadécimal est A3.

£ =% A3

Cependant, ce n'est pas le cas dans (tous) encodage/décodage de fonctions dans Javascript ...

encodeURI/encodeURIComponent 
Encodes a Uniform Resource Identifier (URI) component by 

remplaçant chaque instance de certains caractères par un , deux ou trois séquences d'échappement représentant le codage UTF-8 du caractère

Ce qui signifie, afin de coder notre signe aimé, Javascript utilise 2 caractères. C'est là que "Â" gênant arrive ...

£ =% C2% A3

Hope it helps.

1

Je pense que bobince a la réponse idéale qui est « servir la page en UTF-8" , mais que je ne peux pas faire cela, je posterai mon travail autour de la prospérité.

Ajout d'un unmunge champ caché avec une non-ISO 8859-1 (ce que nos pages sont servis) caractère étendu force la soumission en UTF8

si

<input type="hidden" name="unmunge" value="&#x20ac;" /> 

fixe l'encodage (l'entité est le symbole de l'euro).