[英]json_encode and mysql unicode problem
我有以下javascript代码:
http://www.nomorepasting.com/getpaste.php?pasteid=22561
效果很好(makewindows函数已更改为显示它是一个php变量),但是html包含unicode字符,并且只会分配到第一个unicode字符的字符。 如果我制作了一个小的测试文件并直接回显了article_desc,则将输出所有html,尽管会显示方格标记而不是正确的符号。 但是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');
json_encode
期望字符串为UTF-8编码的字节流。 您将必须在内部使用utf-8编码的字符串(无论如何,这是目前处理PHP中unicode字符的唯一当前方法),或使用其他库来生成json。
我遇到过同样的问题。 我正在使用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 。
json_encode( utf8_encode( $Content ) );
这样可以解决您的问题。
我认为您不需要json_encode。 json_encode将PHP数组和对象编码为可读的JavaScript格式。 如果您在ajax中发送纯文本或html,则不需要json_encode
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.