2010-12-13 18 views
1

J'ai un script javascript qui appelle une page php pour fournir un formulaire ajax avec des suggestions. Les suggestions sont renvoyées très bien par la page php, mais pour une raison quelconque, quand je mets le responsetext de la demande d'objet javascript comme élément dans ma page HTML, tous les caractères spéciaux (c'est-à-dire á ou ã) apparaissent comme ce point d'interrogation . Existe-t-il une fonction II doit s'exécuter sur le texte de réponse de la demande pour s'assurer qu'ils sont lus correctement?Les caractères spéciaux dans mes variables javascript continuent à apparaître comme , comment puis-je empêcher cela?

Merci. J'essaierais, dans votre script php, de tout encoder en tant qu'entités html

Répondre

0

Ceci peut être facilement testé en faisant quelque chose comme ça avant de retourner les résultats javascript:

$results = htmlentities($htmlstring); 

Il y a aussi la fonction htmlspecialchars vous pouvez essayer.

En savoir plus sur cette ici:

+0

'htmlentities' est souvent problématique. Elle seule entity-reference-remplace les caractères qui ont réellement des entités HTML définies, par exemple 'é'->' & eacute; ', mais' e̋'-> 'e̋', donc cela ne résout pas tout le problème de non-utilisation. Caractères ASCII. L'argument 'encoding' par défaut, omis (comme ici), est également ISO-8859-1, qui n'est presque jamais l'encodage avec lequel vous travaillez, ce qui entraîne des références d'entité incorrectes dans la sortie. – bobince

4

Si vous n'êtes pas au service de vos pages HTML UTF-8, le navigateur suppose un codage, généralement un seul octet de Windows codepage selon dans les paramètres régionaux de l'utilisateur.

Mais cela ne se produit pas pour AJAX. Avec XMLHttpRequest, à moins que vous n'indiquiez spécifiquement un codage dans le paramètre Content-Type: ...; charset=, le navigateur le traitera comme UTF-8. Cela signifie que si vous diffusez du contenu de la page de code Windows 1252 (Europe de l'Ouest), vous obtiendrez une séquence UTF-8 non valide et un point d'interrogation conséquent.

Vous ne voulez pas utiliser un encodage non-UTF-8! Assurez-vous que vous utilisez UTF-8 tout au long de votre application. Servez toutes vos pages avec Content-Type: text/html; charset=utf-8, stockez vos données dans des tables UTF-8, utilisez mysql_set_charset() pour choisir UTF-8, etc.

Dans tous les cas, pensez à transmettre les réponses AJAX à l'aide de JSON. La fonction json_encode() créera une chaîne JSON qui utilise des séquences d'échappement JavaScript pour les caractères non-ASCII, ce qui évite tout problème de discordance de codage. En outre, il est plus facile d'étendre cette fonctionnalité pour ajouter des fonctionnalités que renvoyer du code HTML brut.