【问题标题】:json_encode and mysql unicode problemjson_encode和mysql unicode问题
【发布时间】:2010-09-25 20:43:59
【问题描述】:

我有以下 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');

【问题讨论】:

  • 你能看看数据库中的unicode是否正确吗?即问号是否存在?
  • 据我所知,数据库中没有问号,但可能也不正确的 unicode。

标签: php javascript html ajax unicode


【解决方案1】:

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

【讨论】:

  • json_encode 还会为您处理转义引号等内容
【解决方案2】:

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

【讨论】:

  • 有没有办法将数据转换成unicode或者插入mysql数据库?
  • 您可以使用 utf8_encode() 转换 latin1 字符串(这是 php5 的默认值)。为什么不能使用 Zend Framework 组件?
【解决方案3】:
json_encode( utf8_encode( $Content ) );

这将解决您的问题。

【讨论】:

    【解决方案4】:

    我有同样的问题。我正在使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      相关资源
      最近更新 更多