当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

php-将utf8编码的jsonp注入win 1255编码的网页时出现问题

admin 68℃
我正在开发一个作为js片段嵌入到网站中的第三方服务,其中需要从我的php服务器获取一些js on p数据,并在宿主嵌入网站上显示js on对象中包含的文本。

我正在使用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中包含的文本显示得乱七八糟。将网站的编码(在浏览器中,而不是源代码中)更改为unicode'修复'了json中显示文本的问题,当然,这会使页面的其余部分看起来像是乱七八糟的……在将头(…)行添加到php脚本之前,ff也遇到了类似的问题。

我该怎么办?有人知道为什么它在FF而不是IE中工作得很好吗?有没有一个额外的定义,如标题(…)一个需要为IE特别?

限制条件: 我无法控制嵌入网站 json必须用utf8编码(这就是我的数据库的工作原理) 相同的代码需要能够处理utf8编码的页面和非utf8页面

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

header('content-type:text/javascript;charset=utf8');

header('content-type:text/javascript;charset=utf-8');

是的,字符集名称中缺少'-'。转数UTF8(不带破折号)不被IE理解,而被FF理解。 快乐。

希望这能对某些人有所帮助,节省一些浪费的时间。

转载请注明:我的代码 » php-将utf8编码的jsonp注入win 1255编码的网页时出现问题