Проблема внедрения 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. Радость.
Надеюсь, это когда-нибудь окажется полезным для кого-то и сэкономит потраченное время.