2010-08-25 23 views
1

Je développe un service tiers incorporé dans des sites Web comme un extrait JS, qui doit entre autres récupérer des données jsonp de mon serveur PHP, et afficher le texte contenu dans l'objet json sur le site d'intégration de l'hébergement.Problème d'injection de code JSONP encodé en UTF8 dans une page Web codée Win 1255

J'utilise jQuery, donc je adresse la demande .getJSON suivante:

$.getJSON("http://localhost/php/server.php?a=gfs"+"&callback=?",function(Obj) { 
       doSomething(Obj); 
      }); 

et sur le côté PHP (server.php) J'ai:

<?php 
     header('Content-Type: text/javascript; charset=utf8'); 
$retval = file_get_contents('../scripts/file.json'); 
//change to json php 
     $callback = $_GET['callback']; 
     echo $callback . '(' . $retval . ')';  
?> 

Ceux-ci fonctionnent parfaitement dans FF , mais échoue dans IE lorsque le site Web d'intégration est encodé avec quelque chose de différent de utf8, en particulier une page Web Windows 1255 (en hébreu), dans le sens où le texte contenu dans file.json est affiché en tant que charabia. Changer l'encodage du site web (dans le navigateur, pas la source) en unicode "corrige" le problème avec le texte affiché du json, bien que le reste de la page ressemble bien sûr au charabia ... J'ai eu un problème similaire avec FF, avant d'ajouter la ligne d'en-tête (...) au script PHP.

Que dois-je faire? Est-ce que quelqu'un sait pourquoi cela fonctionne bien dans FF et pas dans IE? Existe-t-il une définition supplémentaire telle que l'en-tête (...) nécessaire pour IE en particulier?

Contraintes: Je ne contrôle pas sur le site de noyage file.json doit être codé en UTF8 (qui est comment mes œuvres db) Le même code doit être capable de gérer à la fois UTF8 pages et des pages non UTF8 codées

+0

Artefacto - merci pour le montage! – odedbd

Répondre

0

urgh. Il semble que le correctif pour IE modifie la définition de l'en-tête de:

header ('Content-Type: text/javascript; charset = utf8');

à

header ('Content-Type: text/javascript; charset = utf-8'); Yep, le "-" manquant dans le nom du jeu de caractères. tours de l'utf8 (sans le tiret) n'est pas compris par IE, alors qu'il est compris par FF. La joie.

Espérons que cela pourrait s'avérer utile pour quelqu'un, parfois, et économiser du temps perdu.