我有一个从数据库中获取的ISO字符串,当我对它进行utf8_encode时,我会得到一个\ u00f6而不是Ö。这混淆了这个PHP脚本的javascript / html。为什么有一个\ u00f6而不是Ö?如何获得Ö而不是?
编辑: 好的,我做了一些实验,结果发现这是由utf8_encode和json_encode的组合引起的。虽然如果我根本没有utf8_encode,json中的值将为null。
json_encode(array("city"=>utf8_encode("göteborg")))
答案 0 :(得分:9)
utf8_encode
不会将字符编码为\uxxxx
,因为您自己发现它是json_encode
这样做的。这没关系,因为JSON格式指定了这种行为。如果您的客户端正确地将JSON字符串解码为Javascript数据类型,则\uxxxx
转义符将转换为正确的Unicode字符。
如果您的字符串是Latin1编码的话,json_encode
丢弃字符:它没有在手册页上明确说明,但Javascript和JSON完全基于Unicode,所以我怀疑Latin1是一个无效且意外的编码用于JSON字符串,因此它会中断。
答案 1 :(得分:1)
你怎么打印? javascript本身支持\ uXXXX编码,并在javascript中执行此操作:
var x = "\u00f6"; alert(x);
应打印出小ö。
编辑:根据你的代码,如果你直接输出到响应流并在客户端使用实际响应作为js中的变量,你根本不应该关心json_encode。
您只需通过设置内容类型标题告诉浏览器内容为utf8:
header('content-type: text/plain;charset=utf8');
然后jQuery.data()代码就可以了。