2008-12-08 57 views
2

我有以下的javascript代码:json_encode和mysql unicode的问题

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

的正常工作(该makewindows功能被改变,以显示它是一个PHP变量),但是HTML包含Unicode字符,并且只会分配指向第一个Unicode字符的字符。如果我制作一个小测试文件并直接回显article_desc,则会输出所有html,但会显示quatsions标记而不是正确的符号。然而,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

你可以看到,如果unicode是正确的数据库?即是否有问号? – 2008-12-08 14:16:28

+0

从我可以告诉数据库中没有问号,但也许不正确的unicode。 – 2008-12-09 12:12:05

回答

-1

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

+0

json_encode也会处理像转义你的报价 – 2008-12-08 14:04:05

+0

我的坏你:) – Irmantas 2008-12-08 14:09:45

3

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

1
json_encode(utf8_encode($Content)); 

这将解决您的问题。

2

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

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

如果您使用的,而不是库MySQLi PDO,你可以这样来做:

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

如果你不

我问我的数据库适配器使用UTF8解决的问题使用Zend_Db但使用mysqli,你可能想看看http://php.net/manual/en/mysqli.set-charset.php

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