Проблема внедрения JSONP в кодировке UTF8 в веб-страницу в кодировке Win 1255

Я разрабатываю стороннюю службу, встроенную в веб-сайты в виде фрагмента 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 ответ

Решение

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

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

в

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

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

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

Другие вопросы по тегам