1

我正在开发作为 JS 片段嵌入网站的第三方服务,除其他外,它需要从我的 PHP 服务器获取一些 jsonp 数据,并在托管嵌入网站上显示 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(希伯来语)网页)编码时,在 IE 中失败,因为 file.json 中包含的文本显示为乱码。将网站的编码(在浏览器中,而不是源代码中)更改为 unicode “修复”了来自 ​​json 的显示文本的问题,同时当然会使页面的其余部分看起来像乱码......我有一个类似的问题使用 FF,在我将 header(...) 行添加到 php 脚本之前。

我应该怎么办?有谁知道为什么它在 FF 中运行良好而不在 IE 中运行良好?是否有额外的定义,例如 IE 特别需要的 header(...) ?

约束:我无法控制嵌入网站 file.json 必须以 utf8 编码(这就是我的数据库的工作方式)相同的代码需要能够处理 utf8 编码页面和非 utf8 页面

4

1 回答 1

0

呃。似乎 IE 的修复正在更改标头定义:

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

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

是的,字符集名称中缺少“-”。变成 utf8(没有破折号)不被 IE 理解,而它被 FF 理解。喜悦。

希望这可能会在某个时候对某人有所帮助,并节省一些浪费的时间。

于 2010-08-25T18:13:34.440 回答