【问题标题】:Yii And UTF8 Display, UTF8 works with mysqli but not yii backendYii 和 UTF8 显示,UTF8 与 mysqli 一起使用,但不适用于 yii 后端
【发布时间】:2012-08-04 06:09:32
【问题描述】:

我一直在努力让 Yii 正确显示 utf8,即使我的 apache 服务器和数据库都设置为正确显示它。

更具体地说,我有一组从 mysql 数据库中提取的汉字/假名数据。作为对它的一个简单测试,我设置了一个视图页面,使用 mysqli 和 yii 的 mvc 架构从中提取数据。使用 mysqli 拉取时,它会正确显示,而使用 yii 拉取时,它不会正确显示。这是来自同一个确切的页面,这也意味着它来自同一个确切的控制器。 强制模型后端使用 utf8 编码是否遗漏了什么?

图片:http://i.imgur.com/BLmrP.png

这是我在 yii 的 mvc 内容的视图文件中使用的代码:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'enablePagination' => false,
)); ?>

然后mysqli就是你所期望的。

任何帮助将不胜感激。

【问题讨论】:

    标签: utf-8 yii


    【解决方案1】:

    您必须指定用于数据库连接的字符集。这是在你的主配置文件中完成的(默认是protected/config/main.php),看起来像这样

    return array(
        ......
        'components'=>array(
            ......
            'db'=>array(
                'connectionString'=>'sqlite:protected/data/source.db',
                'charset'=>'utf8',
            ),
        ),
        ......
    );
    

    如果没有明确设置charset 参数,则连接通常是 latin1,这就是您看到乱码的原因。

    另外,还有一个wiki entry about setting up Unicode properly

    【讨论】:

    • 已经将 charset 设置为 utf8,甚至输入 'initSQLs'=&gt;array('set names utf8') 以进行良好的衡量(即使我已经将我的 mysql 名称(包括连接)默认设置为 utf8)。还阅读了维基并做了一切。或者我是否应该在没有 BOM 的情况下将 yii 核心文件更改为 UTF-8?我以为他们在下载后就会这样。
    • 不,没必要。我能想到的另一件事是页面的编码。检查你的标题。如果这不能解决问题,您的数据实际上可能采用其他编码。
    • 肯定会发送标头,因为当我将语言更改为“ja”时和 mysqli 获取的表中都会显示假名/汉字。数据也可能是 UTF-8,因为从 mysqli 正确显示的数据与 yii 获取的数据相同。哦,我检查了表的 CREATE 语句......绝对是 utf8。我唯一能想到的是,我必须在控制器或一般模型中缺少CActiveDataProvider 的某些内容。
    • 连接编码只能在数据库配置文件中设置。 mysqli 是否也使用 utf-8 连接?也许不是,而且数据确实是 latin1。你能用phpmyadmin之类的东西检查一下表格吗?如果可以,您是否正确地看到了文字,还是那里也乱七八糟?
    • 啊!太感谢了。我认为我的数据库连接是 utf8 是一个错误的假设。不太确定我最初对存储数据做了什么,但是一旦我在 yii 中删除了我的 db 连接的 charset 和 initSQL 部分,它就起作用了。我想我一定是以十六进制或其他方式存储了汉字……好吧,无论如何,再次感谢!帮了大忙。
    猜你喜欢
    • 1970-01-01
    • 2012-06-14
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2013-01-22
    相关资源
    最近更新 更多