2010-03-07 4 views
5

J'essaie ce code (sur mon serveur web local)

<?php 
echo 'the word is/думата е '.$_GET['word']; 
?> 

mais j'obtenir le résultat corrompu quand entrer ? Mot = проба

the word is/думата е ���� 

Le document est enregistré en tant que 'UTF-8 sans nomenclature' et les en-têtes sont également en format UTF-8. J'ai essayé urlencode() et urldecode() mais l'effet était le même. Lorsque le télécharger sur le serveur web, fonctionne très bien ...

Répondre

3

Que faire si vous essayez d'envoyer un en-tête HTTP Content-type, pour indiquer le navigateur qui encodage/charset votre page génère?

Par exemple, quelque chose comme cela pourrait aider:

header('Content-type: text/html; charset=UTF-8'); 
echo 'the word is/думата е '.$_GET['word']; 

Bien sûr, cela est si vous générez HTML - vous êtes probablement. Considérant qu'il existe un paramètre de configuration au niveau du serveur qui définit le codage qui est envoyé par défaut, peut-être que le codage par défaut sur votre serveur est OK - alors que celui sur votre serveur local ne l'est pas.

L'envoi d'un tel en-tête résoudrait le problème: il s'assurerait que l'encodage est toujours correctement défini.

+0

J'ai essayé avec en-tête() - même résultat. Je pense que c'est quelque chose avec ma configuration de serveur local mais je ne sais pas où chercher. je suis arrivé: [Environnement Apache] HTTP_ACCEPT_CHARSET \t UTF-8, * [en-têtes HTTP Informations] Accept-Charset \t UTF-8, * Content-Type \t text/html; charset = utf-8 [Variables PHP] _SERVER ["HTTP_ACCEPT_CHARSET"] \t UTF-8, * – T1000

2

Je suppose que vous utilisez le serveur Web Apache.

Il y a un problème commun avec la configuration Apache - une ligne avec "AddDefaultCharset" dans la config doit être commentée (ajouter # au début de la ligne, ou remplacer la ligne par "AddDefaultCharset off") car elle "overrides tout encodage donné dans les fichiers dans les balises de codage meta http-equiv ou xml ". Dans mon installation actuelle (Apache2 @ Ubuntu Linux), la ligne se trouve dans "/etc/apache2/conf.d/charset" mais dans d'autres (Linux/Unix) les configurations peuvent se trouver dans "/ etc/apache2/httpd" .conf ", ou" /etc/apache/httpd.conf "(si vous utilisez Apache 1). Si vous ne le trouvez pas dans ces fichiers, vous pouvez le rechercher avec "cd/etc/apache2; grep -r AddDefaultCharset *" (pour Apache 2 @ Unix/Linux).

+0

nupogodi 10x pour votre réponse! Vous êtes serré sur le fait que j'utilise apache (sur Windows) mais après avoir recherché le texte "AddDefaultCharset" dans tous les fichiers *. * Dans le dossier apache je n'ai trouvé que 1 hit dans le fichier appelé "httpd.h" mais il est déjà commenté J'espère que vous avez d'autres sugestions. – T1000

+0

Selon http://httpd.apache.org/docs/2.0/platform/windows.html#cust apache est configuré par les fichiers du sous-répertoire conf de votre installation. S'il n'y a pas de "AddDefaultCharset", essayez d'ajouter une nouvelle ligne "AddDefaultCharset off" dans le fichier httpd.conf dans ce répertoire (s'il existe un tel fichier, ou ajoutez la ligne à un autre fichier que vous connaissez utilisé par apache pour la configuration) . –

+0

nupogodi Je l'ai ajouté dans httpd.conf (je suis sûr que les paramètres d'Apache sont à partir de là) le redémarrer, mais il n'y a eu aucun effet. – T1000

0

Si vous recevez $ _GET d'AJAX assurez-vous que votre fichier blablabla.js en encodage UTF-8. Vous pouvez également utiliser iconv("cp1251","utf8",$_GET['word']); pour afficher votre $ _GET ['mot'] dans UTF-8

0

Je viens d'avoir le problème et il arrive parfois si vous filtrez la variable GET avec htmlentities(). Il semble que cette fonction convertit les caractères cyrilliques en trucs bizarres.