php utf8_encode - 字符前缀为\ u

时间:2011-10-07 08:47:56

标签: php unicode utf-8

我有一个从数据库中获取的ISO字符串,当我对它进行utf8_encode时,我会得到一个\ u00f6而不是Ö。这混淆了这个PHP脚本的javascript / html。为什么有一个\ u00f6而不是Ö?如何获得Ö而不是?

编辑: 好的,我做了一些实验,结果发现这是由utf8_encode和json_encode的组合引起的。虽然如果我根本没有utf8_encode,json中的值将为null。

json_encode(array("city"=>utf8_encode("göteborg")))

2 个答案:

答案 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()代码就可以了。