Zend Framework和UTF-8字符的问题(æøå)

时间:2010-02-01 17:41:26

标签: php zend-framework utf-8

希望这里有一些关于Zend Framework的知识比我更多,我一直试图寻找答案,但我无法在任何地方找到任何东西。

问题:

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

系统

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

为使其有效而进行了修改(但没有)

的application.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

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

Soulution:

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

感谢Pekka和Greg K指出我正确的方向。

6 个答案:

答案 0 :(得分:3)

收听您的描述后,数据将以UTF-8的形式从表单中删除。可能是您的数据库表本身仍然是latin1

答案 1 :(得分:1)

对我有用的解决方案:

以上所有数据库内容,以及将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');
    }

}

现在像åäö这样的瑞典语字母显示正确,虽然没有尝试过,但我认为中文或其他任何内容都会出现。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我遇到的问题是我有一个使用htmlentities()的装饰器,如果没有指定则默认为ISO-8859-1编码,而不是UTF-8用于PHP版本&gt; = 5.4

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

我在我的网站上遇到同样的问题,我在application.ini文件中添加了charset解决了这个问题。

这里我添加以下代码。

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