I am developping a Zend application. The data in my database is encoded in "utf8_unicode_ci". I declared in my application.ini :
resources.view.encoding = "UTF-8"
but whenever I try to retrieve a String containing special characters like
{'é', 'à', 'è',...} in the db, the string doesn't display unless I use the function : utf8_decode()
So I tried to set the charset to UTF-8 in :
Bootstrap :
protected function _initDoctype() {
$this->bootstrap('view');
$view = $this->getResource('view');
$view->doctype('XHTML_STRICT');
$view->setEncoding('UTF-8');
}
protected function _initFrontControllerOutput() {
$this->bootstrap('FrontController');
$frontController = $this->getResource('FrontController');
$response = new Zend_Controller_Response_Http;
$response->setHeader('Content-Type', 'text/html; charset=UTF-8', true);
$frontController->setResponse($response);
$frontController->setParam('useDefaultControllerAlways', false);
return $frontController;
}
Layout :
$this->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf8');
echo $this->headMeta();
application.ini :
resources.view.encoding = "UTF-8"
resources.db.params.charset = "utf8"
EDIT : Now I can display special chars in a page, but when I retrieve elements from the database, special chars are not displayed.
null
($this->escape($string)
)echo $string
substitutes special chars with ?
so I still have to use utf8_decode()
to display them. Any suggestion ?
thanks for your help !!
Have you set the following, to fetch data from MySQL as utf8?
resources.db.params.charset = "utf8"
It is necessary to do three things to get correct characters displaying correctly:
Further information in Rob Allen's article.
I had the same problem while using the Doctrine2 module in my Zend Framework 2 application. Explicitly setting the character set for my Doctrine2 module solved the issue...
Just add 'charset' => 'utf8'
to your doctrine connection parameters:
'params' => array(
'host' => 'localhost',
'port' => 'yourport',
'user' => 'username',
'password' => 'password',
'dbname' => 'yourdatabase',
'charset' => 'utf8',
)
Might also work for your normal database connection. Add 'charset=utf8'
to the connection string:
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:host=$localhost;dbname=$yourdatabase;charset=utf8',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
)
),
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With