проблема внедрения JSONP в кодировке UTF8 в веб-страницу в кодировке Win 1255 - PullRequest
1 голос
/ 25 августа 2010

Я разрабатываю стороннюю службу, встроенную в веб-сайты в виде фрагмента JS, для которой, помимо прочего, необходимо получить некоторые данные jsonp с моего PHP-сервера и отобразить текст, содержащийся в объекте json, на веб-сайте встраивания хостинга.

Я использую jQuery, поэтому я выдаю следующий запрос .getJSON:

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

и на стороне PHP (server.php) у меня есть:

<?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 . ')';      
?>

Они отлично работают в FF, но не работают в IE, когда веб-сайт для встраивания кодируется с использованием чего-то отличного от utf8, в частности веб-страницы Windows 1255 (иврит), в том смысле, что текст, содержащийся в файле file.json, отображается как бред , Изменение кодировки веб-сайта (в браузере, а не в исходном коде) на юникод «исправляет» проблему с отображаемым текстом из json, хотя, конечно, делает остальную часть страницы похожей на бред… У меня была похожая проблема с помощью FF, до того как я добавил строку заголовка (...) в скрипт php.

Что мне делать? Кто-нибудь знает, почему он хорошо работает в FF, а не в IE? Есть ли дополнительное определение, такое как заголовок (...), который требуется специально для IE?

Ограничения: У меня нет контроля над сайтом встраивания file.json должен быть закодирован в utf8 (так работает мой db) Один и тот же код должен быть в состоянии обрабатывать как страницы с кодировкой utf8, так и страницы без кодировки utf8

1 Ответ

0 голосов
/ 25 августа 2010

Urgh.Похоже, что исправление для IE изменяет определение заголовка с:

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

на

заголовок ('Content-Type: text / javascript; charset = utf-8');

да, пропущенный знак "-" в имени кодировки.Обороты UTF8 (без черты) не понимаются IE, в то время как FF понимает их.Радость.

Надеюсь, что это когда-нибудь окажется полезным для кого-то и сэкономит немного потраченного времени.

...