我正在开发Zend应用程序。我的数据库中的数据以“utf8_unicode_ci”编码。 我在我的application.ini声明:
resources.view.encoding = "UTF-8"
但每当我尝试检索包含特殊字符(如
)的字符串时 数据库中的 {'é','à','è',...},除非我使用该函数,否则不会显示该字符串:utf8_decode()
所以我尝试将字符集设置为UTF-8:
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;
}
布局:
$this->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf8');
echo $this->headMeta();
application.ini:
resources.view.encoding = "UTF-8"
resources.db.params.charset = "utf8"
编辑:现在我可以在页面中显示特殊字符,但是当我从数据库中检索元素时,不会显示特殊字符。
null
($this->escape($string)
)echo $string
用?
所以我仍然需要使用utf8_decode()
来显示它们。有什么建议吗?
感谢您的帮助!!
答案 0 :(得分:16)
您是否设置了以下内容,以便以utf8的形式从MySQL获取数据?
resources.db.params.charset = "utf8"
为了正确显示正确的字符,有必要做三件事:
Rob Allen's article中的更多信息。
答案 1 :(得分:7)
在我的Zend Framework 2应用程序中使用Doctrine2模块时遇到了同样的问题。明确设置我的Doctrine2模块的字符集解决了这个问题......
只需将'charset' => 'utf8'
添加到您的学说连接参数:
'params' => array(
'host' => 'localhost',
'port' => 'yourport',
'user' => 'username',
'password' => 'password',
'dbname' => 'yourdatabase',
'charset' => 'utf8',
)
也可能适用于正常的数据库连接。将'charset=utf8'
添加到连接字符串:
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:host=$localhost;dbname=$yourdatabase;charset=utf8',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
)
),
答案 2 :(得分:3)
您是否尝试过将标题设置为utf8?通常在php中我这样做
header ('Content-type: text/html; charset=utf-8');
在你的情况下,我认为你必须使用不同的东西。我从Zend Framework documentation采用了这个例子,也许你应该使用不同的东西,我不是Zend_Framework的专家
// Within an action controller action:
// Set a header
$this->getResponse()
->setHeader('Content-Type', 'text/html')
->appendBody($content);
如果您设置标题,元数据和编码它应该可以工作(从您的代码看起来我只是设置元和编码)
(看看这个问题,明白我的意思,Berry Langerak的回答:PHP Display Special Characters)
编辑 - 我还在本文中找到了另一个示例,它设置了控制器的标题,看看它,也许这就是你要找的东西:http://www.chris.lu/en/news/show/4d56d0ecb058c/
这部分可能就是你要找的东西:
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;
}
答案 3 :(得分:1)
也许您应该尝试编辑源文件,保持UTF-8作为编辑器的编码。有时,即使您在HTML标题,数据库编码等中使用UTF-8,如果您的源文件采用不同的编码,也可能导致此类错误。
答案 4 :(得分:1)
就像其他人说的那样,我们必须设置编码,在我的Zend框架中,我必须以一点不同的方式来进行编码:
字符集=“ utf8”
adapter = PDO_MYSQL
dbname = skydevel_skydevfinal
username = root
password =
hostname = localhost
sprofiler = false
charset = "utf8"
在声明数据库,用户名等的位置下方添加此行。
2。现在bootstrap.php文件中的引用指向该新行:
'字符集'=> $ dbConfig->字符集
end_Db::factory($dbConfig->adapter, array('host' => $dbConfig->host,
'username' => $dbConfig->username,
'password' => $dbConfig->password,
'dbname' => $dbConfig->dbname,
'charset'=>$dbConfig->charset
ALTER DATABASE skydevel_skydevfinal CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE ch_news_comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
答案 5 :(得分:0)
如果需要使用utf8_encode(),则意味着数据库中的数据不是以UTF8编码的。 当您说您的数据库以“utf8_unicode_ci”编码时,它实际上并不意味着您的数据以UTF8编码。
要使用您显示的任何代码验证集合编码是否与Zend Framework一起使用,这很容易。使用firefox只需右键单击页面并单击“查看页面信息”,如果它说“编码:UTF8”,则表示您的页面编码正确,但您的数据不是。
如果您使用的是utf8_decode(),则意味着Zend无法设置编码。
答案 6 :(得分:0)
如果你把所有的编码和整理(如'utf8_general_ci')放在BD中,然后再放在application.ini中,只需要接下来的mysql连接参数,resources.db.params.charset = "utf8"
就可以了。
答案 7 :(得分:0)
我有同样的问题,我在config / autoload / global.php中修复了它 通过设置charset值:
'db' => [
'adapters' => [
'dummy' => [],
'myadapter' => ['charset' => 'utf-8',],
],
答案 8 :(得分:-2)
我曾经用许多语言开发ZF应用程序,包括RTL语言。 我曾经把它添加到我的bootstrap文件中,我发现它非常整洁。
也许这不是答案,但我认为这是一个很好的建议:
public function _initMB(){
mb_internal_encoding("UTF-8");
}
有关mb_internal_string
结帐的更多信息:http://php.net/manual/en/function.mb-internal-encoding.php