【问题标题】:Problem with Zend Framework and UTF-8 characters (æøå)Zend Framework 和 UTF-8 字符的问题 (æøå)
【发布时间】:2010-02-01 17:41:26
【问题描述】:

希望这里有一些比我更了解 Zend 框架的人,我一直在尝试寻找答案,但我无法在任何地方找到任何东西。

问题:

当使用 Zend_Db 将 Zend_Form 的内容添加到数据库时,字符 æ ø å 被 øæå 替换

系统

  • WampServer 2.0i
    • Apache 2.2.11
    • MySQL 5.1.36
    • PHP 5.3.0
  • Zend 框架 1.10.0

进行了修改以使其正常工作(它没有)

应用程序.ini

resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "//Brukernavn//"
resources.db.params.password = "//Passord//"
resources.db.params.dbname = "//Database//"
resources.db.params.charset = "utf8"
resources.db.params.driver_options.1002 = "SET NAMES utf8"
resources.db.isDefaultTableAdapter = true

对于我添加的所有表单

->setAttrib('accept-charset', 'utf-8');

在 Bootstrap.php 中,我放置了以下代码:

$view->setEncoding('UTF-8');
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');

数据库设置为utf8_general_ci

任何人有关于如何让它工作的提示吗?

解决方案:

这是 PHP 5.3.0 和 5.3.1 中的一个错误(http://bugs.php.net/bug.php?id=47224 ) 所以我选择降级到 5.2.11,一切都像一个魅力。

感谢 Pekka 和 Greg K 为我指明了正确的方向。

【问题讨论】:

    标签: php zend-framework utf-8


    【解决方案1】:

    听你的描述,数据偏离了 UTF-8 格式。难道你的数据库表本身仍然是latin1

    【讨论】:

    • 我相信他说的数据库设置为utf8_general_ci
    • 哦,是的,看多了。尽管如此,表和它们的列也需要是 utf-8 (仅转换数据库是不够的)。如果他确认表和列是 UTF-8,我会删除这个答案。
    • 感谢您的回答。实际上我忘记了自己转换字段,但这样做后行为没有改变。
    • 只是一个小技巧,您可以尝试在插入数据之前手动运行"SET NAMES utf8" 作为查询吗?那么你至少会知道连接是问题所在。
    • 感谢您的帮助。你让我走上了正确的道路,这是 PHP 5.3.0 和 5.3.1 中的一个错误 bugs.php.net/bug.php?id=47224 再次感谢。
    【解决方案2】:

    对我有用的解决方案:

    以上所有数据库的东西,再加上 UTF-8 编码的 headMeta 标签到布局中。

    所以,layout.phtml 看起来像这样:

    <?php echo $this->doctype() ?>
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
           <?php echo $this->headMeta(); ?> <!-- This one does the trick! -->       
        </head>
        <body>
            <?php echo $this->layout()->content; ?> 
        </body>
    </html>
    

    Bootstrap.php 是这样的:

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    
        protected function _initDoctype()
        {
            $this->bootstrap('view');
            $view = $this->getResource('view');
            $view->setEncoding('UTF-8');
            $view->doctype('XHTML1_STRICT');
            $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
        }
    
    }
    

    现在像 åäö 这样的瑞典字符可以正确显示,虽然没有尝试过,但我认为中文或其他字符也可以。

    【讨论】:

      【解决方案3】:

      使用 htmlentities($val) 输出编码的值

      【讨论】:

      • 这对我不起作用,因为它只是将错误的字符转换为 html 实体版本
      【解决方案4】:

      对我来说,问题是我有一个使用 htmlentities() 的装饰器,如果未指定,则默认为 ISO-8859-1 编码,而不是 PHP >= 5.4 版本的 UTF-8

      【讨论】:

        【解决方案5】:

        必须在函数_initDatabase() 中添加以下代码。

        $db->getConnection()->exec("SET NAMES 'utf8'");
        

        您可以在这里参考:http://osdir.com/ml/php.zend.framework.db/2008-04/msg00012.html

        【讨论】:

          【解决方案6】:

          我的网站也有同样的问题,我通过在 application.ini 文件中添加字符集解决了这个问题。

          这里我添加以下代码。

          resources.db.params.charset = "utf8"
          resources.db.params.driver_options.1002 = "SET NAMES utf8"
          resources.db.isDefaultTableAdapter = true
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-19
            • 2012-11-10
            • 1970-01-01
            • 1970-01-01
            • 2011-10-27
            • 1970-01-01
            相关资源
            最近更新 更多