我有以下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')修复的;
答案 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。
答案 2 :(得分:1)
json_encode( utf8_encode( $Content ) );
这将解决您的问题。
答案 3 :(得分:-1)
我认为你不需要json_encode。 json_encode将PHP数组和对象编码为可读的JavaScript格式。如果您在ajax中发送纯文本或html,则不需要json_encode