json_encode和mysql unicode问题

时间:2008-12-08 13:54:45

标签: php javascript html ajax unicode

我有以下javascript代码:

http://www.nomorepasting.com/getpaste.php?pasteid=22561

哪个工作正常(makewindows函数已更改为显示它是一个php变量),但是html包含unicode字符,并且只会分配导致第一个unicode字符的字符。如果我创建一个小测试文件并直接回显出article_desc,则会输出所有html,但会显示quetsions标记而不是正确的符号。但是json_encode似乎缩短了html,导致错误。

编辑:这是一个直接从我试图显示的html的mysql数据库转储:

http://www.yousendit.com/download/TTZueEVYQzMrV3hMWEE9PQ

它在源头上说utf-8。回显出article_desc生成的实际页面代码如下:

http://www.nomorepasting.com/getpaste.php?pasteid=22566

它绝对是同一个记录,所以我不确定为什么它看起来非常不同。

编辑:这是通过调用:mysql_query('SET NAMES utf8')修复的;

4 个答案:

答案 0 :(得分:3)

json_encode期望字符串是UTF-8编码的字节流。你必须在内部使用utf-8编码的字符串(这是目前处理PHP中unicode字符的唯一方法),或使用a different library生成json。

答案 1 :(得分:2)

我有同样的问题。我使用 Zend_Db / mysqli,我的数据库内容实际上是UTF8。

我通过要求我的数据库适配器使用UTF8来解决问题:

$conf->db->params['charset'] = 'UTF8';

如果你使用PDO而不是mysqli,你可以这样做:

$pdoParams = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');
$conf->db->params['driver_options'] = $pdoParams;

如果您不使用Zend_Db但使用mysqli,您可能需要查看http://php.net/manual/en/mysqli.set-charset.php

来源:http://www.zfsnippets.com/snippets/view/id/13

答案 2 :(得分:1)

json_encode( utf8_encode( $Content ) );

这将解决您的问题。

答案 3 :(得分:-1)

我认为你不需要json_encode。 json_encode将PHP数组和对象编码为可读的JavaScript格式。如果您在ajax中发送纯文本或html,则不需要json_encode