2009-02-15 5 views
1

Je travaille sur une application web qui devrait être en mesure d'accepter les balises et les requêtes de recherche dans plusieurs langues. Ce n'est pas trop demander, n'est-ce pas?encodage de caractères semble fonctionner sur un serveur MAMP mais pas sur un serveur WAMP

Maintenant, sur mon serveur de développement MAMP tout est génial. Ajouter des tags multilingues, la recherche dans toutes les langues que je veux, etc.

D'autre part, sur la production serveur WAMP, les caractères multilingues donnent du mal. Et même pas tout le temps, juste une partie du temps, ou certains personnages, je ne suis pas encore sûr.

Ce qui arrive est qu'ils obtiennent des caractères supplémentaires et leur décodage d'URL n'est pas correcte.

Les deux environnements utilisent PHP 5, MySQL et Apache. Je suppose que j'ai mal réglé quelque part quelque part.

Des idées?

  • mise à jour: Je suis maintenant sûr que c'est des lettres particulières (la Hebrew ל, מ א par exemple)

  • mise à jour: facilement reproductibles: toujours les mêmes lettres se tromper encodage.

  • type de contenu
  • est text/html; charset=utf-8

De plus, je l'ai mis le doigt sur un peu plus loin:
J'utilise la chaîne de recherche: ליבני
Sur la page de résultats, je vois ceci:

  • Dans la barre d'adresse, la phrase de recherche est correcte, correctement codée en URL.
  • Dans le code HTML lui-même, je vois la chaîne « _יבני » qui est « %D7_%D7%99%D7%91%D7%A0%D7%99 » qui signifie que le ל a été encodée à « %D7_ » au lieu de « %D7%9C » comme il aurait dû.

Je ne sais pas vraiment où aller plus loin.
Des idées? n'importe qui?

+0

Utilisez-vous déjà UTF-8? Est-ce que votre application déclare cette correction (en-tête HTTP)? Quand ces problèmes d'encodage incorrects apparaissent-ils? Et est-ce reproductible? – Gumbo

+0

J'ai modifié la question pour répondre à votre question. merci. – Omer

+0

Que faites-vous exactement avec ces données? – Gumbo

Répondre

0

Il se trouve que le problème est quelque part dans le parse_url() de PHP. Je suppose que dans certaines versions, sur certaines plates-formes, parse_url() ne gère pas correctement les caractères UTF. Il a été repéré sur les fenêtres at least one more time.

J'ai réussi à contourner ce problème pour l'instant.

Merci pour le temps et l'attention de tout le monde, Omer.

0

je vous recommande d'utiliser UTF-8 pour le codage interne et externe. Utilisez le AddDefaultCharset directive pour dire Apache votre encodage par défaut:

AddDefaultCharset utf-8 

Maintenant, il vous suffit de vous assurer que vous application gère les données correctement (voir default_charset directive). Si vous utilisez UTF-8 pour votre sortie, le client doit également l'utiliser pour d'autres requêtes (URL, données de formulaire).

+0

merci, mais cela n'a pas résolu mon problème. – Omer

1

Les jeux de caractères sont un concept simple. La chose confuse à leur sujet, c'est qu'il y a plusieurs niveaux où cela doit être fait correctement. Si vous dérangez dans un endroit, il montrera habituellement dans un endroit complètement différent. Donc, la réponse légèrement condescendante, mais aussi très vraie à votre problème, c'est que vous devez savoir ce que vous faites, au lieu de simplement le piquer avec un bâton jusqu'à ce que ça ait l'air correct.

Je recommande la lecture suivante:

Questions connexes