2010-07-14 4 views
0

mon application obtenant du texte à partir d'un champ de saisie un post sur ajax à un fichier php pour l'enregistrer en db.Caractères spéciaux s'échappant avec JS et PHP

var title = encodeURIComponent($('#title').val()); 

si j'échappe() le titre tout est OK mais j'ai des problèmes avec le caractère "+". Donc j'utilise le codecodeURIComponent().

Maintenant, je habe un problème avec des caractères spéciaux allemands comme « ö » « à » « ü » ils seront affichés comme une chose crypdet ....

ont une certaine idée comment puis-je résoudre ce problème?

Thx

Répondre

1

Je suppose que cela a à voir avec l'encodage: votre page HTML peut être en UTF-8 et les caractères spéciaux sont codés comme ceci:

>>> encodeURIComponent('ö'); 
"%C3%B6" 

Lorsque votre page PHP reçoit, il doit savoir qu'il est UTF-8, et traiter comme UTF-8 - ce qui signifie que tout sur le côté serveur doit travailler avec UTF-8:

  • code PHP doit utiliser les fonctions qui peuvent fonctionner avec des caractères multi-octets
  • La base de données (db, tables, colonnes, ...) doit utiliser UTF-8 pour stocker les données
  • Lors de la génération de pages HTML, vous devez indiquer que c'est UTF-8 aussi, ...


Par exemple, si vous utilisez var_dump() du côté de PHP pour afficher ce qui a été envoyé par le client, ne pas oublier d'indiquer que la page générée est en UTF-8, avec quelque chose comme ceci:

header('Content-type: text/html; charset=UTF-8'); 

Sinon, le navigateur utilisera son défaut charset - qui n'est pas nécessairement le bon, et affichera probablement les ordures.

+0

DB et HTML fonctionne avec uft-8, comment puis-je décoder% C3% B6 en caractères normaux? –

+0

Comme vous voyez% C3% B6 = ¶Á il ya 2 caractères,% c3 et% b6 ... c'est le problème –

+0

En fait, '% C3% B6' ne signifie pas deux caractères; cela signifie deux octets, mais la façon dont ces deux octets sont interprétés dépend du jeu de caractères ;;; Si vous travaillez avec UTF-8, qui est un jeu de caractères multi-octets * (chaque caractère peut prendre jusqu'à 4 octets) *, ces deux octets ne représentent en réalité qu'un seul caractère ;-) ;;; si vous vous assurez que tout est interprété comme UTF-8, tout ira bien ;-) –

0

Vous pouvez utiliser escape("AbcÄüö") et vous obtiendrez "Abc% C4% FC% F6"

en php, vous pouvez ensuite utiliser urldecode($myValue) pour obtenir "AbcÄüö" à nouveau

+0

Si vous vous échappez, vous aurez des problèmes avec le caractère "+" –

+1

Que voulez-vous dire par des problèmes? – jantimon

Questions connexes