Comment dois-je stocker et récupérer les symboles de la livre britannique?

C'est un problème que je rencontre de time en time; Je finis toujours par écrire un horrible bodge, mais je suis sûr qu'il doit y avoir une bonne façon de le gérer (après tout, il n'est sûrement pas rare de vouloir travailler avec des symboles britanniques).

Le problème: l'user entre un symbole de livre britannique ( £ ) dans un champ de text dans le CMS. Ils cliquent sur 'save', et la valeur du champ de formulaire est échappée en utilisant la fonction d' escape() JavaScript escape() et soumise avec une requête jQuery AJAX POST . Cependant, à un certain point, le symbole dièse devient un point d'interrogation (enencoding de caractères incorrect?).

Je ne peux pas simplement convertir le symbole à son entité HTML avant de l'save dans la database, car lorsque les valeurs sont récupérées pour l'affichage sur le site Web, elles sont codées en HTML (l'entité apparaîtra donc telle quelle).

Pour clarifier ça pour moi une fois pour toutes, que dois- je faire ici?

Vous n'avez pas besoin d'utiliser escape fonction d' escape . jQuery gère déjà l'enencoding:

 $.ajax({ url: '/somepage', data: { param1: $('#textfield').val() }, success: function() { } }); 

Assurez-vous simplement que votre application est configurée pour l'enencoding UTF-8:

 <system.web> <globalization requestEncoding="utf-8" responseEncoding="utf-8" /> </system.web> 

Et les pages HTML aussi:

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

la valeur du champ de formulaire est échappée à l'aide de la fonction JavaScript escape ()

Il y a votre problème. escape est la mauvaise façon de créer des valeurs de parameters d'URL, et ne devrait en général jamais être utilisée . Vous searchz encodeURIComponent , qui le fait correctement. Une des choses qui escape dégâts est les caractères non-ASCII comme le £.

Si vous utilisez jQuery comme vous le mentionnez, vous ne devriez jamais avoir besoin de créer une string de données POST manuellement; passez juste une search comme {x: '£'} et il s'occupera de l'enencoding pour vous.

Il se peut qu'il y ait d'autres problèmes pour stocker et récupérer un £ si votre application n'est pas configurée pour gérer correctement Unicode. Idéalement, vous devriez servir vos pages en UTF-8 et en utilisant UTF-8 IO comme mentionné par Darin, plus en utilisant des caractères NATIONAL ( NVARCHAR ) pour stocker les strings Unicode dans SQL Server.

Je ne peux pas simplement convertir le symbole à son entité HTML avant de l'save dans la database, car lorsque les valeurs sont récupérées pour l'affichage sur la page d'accueil du site Web, elles sont codées en HTML

Bien! C'est absolument correct. Vous ne devriez jamais stocker des données codées en HTML dans la database, c'est complètement la mauvaise façon de faire face aux problèmes d'échappement en sortie. Continuez à encoder HTML tout le text qui va à la sortie.

Essayez d'save le symbole de la livre sterling en tant que & pound; de sorte que quand il est affiché dans la réponse html il montrera le symbole de la livre britannique.