Проблема с Zend Framework и символами UTF-8 (ссылка) - PullRequest
9 голосов
/ 01 февраля 2010

Надеюсь, что некоторые из них имеют больше знаний о Zend Framework, чем я, я пытался найти ответ, но нигде не смог ничего найти.

Проблема:

При добавлении содержимого Zend_Form в базу данных с использованием Zend_Db символы ø ø å заменяются на øæà ¥

System

  • 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, и все работало как шарм.

Спасибо Пекке и Грегу К. за то, что они указали мне правильное направление.

Ответы [ 6 ]

3 голосов
/ 01 февраля 2010

Прислушиваясь к вашему описанию, данные отходят от формы как UTF-8. Может быть, ваши таблицы базы данных все еще latin1?

1 голос
/ 14 августа 2011

Решение, которое сработало для меня:

Все вышеперечисленное, а также добавление тега headMeta с кодировкой UTF-8 в макет.

Итак, 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');
    }

}

Теперь шведские символы, такие как ääö, отображаются правильно, и, хотя и не пробовали, я думаю, что китайский язык или что-то еще тоже будет.

0 голосов
/ 26 апреля 2016

У меня та же проблема на моем сайте, я решил эту проблему, добавив кодировку в файл application.ini.

здесь я добавляю следующие коды.

resources.db.params.charset = "utf8"
resources.db.params.driver_options.1002 = "SET NAMES utf8"
resources.db.isDefaultTableAdapter = true
0 голосов
/ 15 сентября 2013

В функцию _initDatabase () необходимо добавить следующий код.

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

Вы можете сослаться на это здесь: http://osdir.com/ml/php.zend.framework.db/2008-04/msg00012.html

0 голосов
/ 13 июня 2012

Для меня проблема заключалась в том, что у меня был декоратор, использующий htmlentities(), который по умолчанию имеет кодировку ISO-8859-1, если не указано, вместо UTF-8 для версий PHP> = 5.4.

0 голосов
/ 08 ноября 2010

использовать htmlentities ($ val) для вывода закодированных значений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...