Database 如何在Zend应用程序中将字符集设置为UTF-8?
我正在开发Zend应用程序。我的数据库中的数据以“utf8\U unicode\U ci”编码。 我在application.ini中声明:Database 如何在Zend应用程序中将字符集设置为UTF-8?,database,zend-framework,utf-8,character-encoding,Database,Zend Framework,Utf 8,Character Encoding,我正在开发Zend应用程序。我的数据库中的数据以“utf8\U unicode\U ci”编码。 我在application.ini中声明: resources.view.encoding = "UTF-8" resources.view.encoding = "UTF-8" resources.db.params.charset = "utf8" 但是每当我试图检索包含特殊字符的字符串时,比如 {'ee','a','è',…}在数据库中,除非我使用函数:utf8_decode() 因此,我
resources.view.encoding = "UTF-8"
resources.view.encoding = "UTF-8"
resources.db.params.charset = "utf8"
但是每当我试图检索包含特殊字符的字符串时,比如
{'ee','a','è',…}在数据库中,除非我使用函数:utf8_decode()
因此,我尝试在中将字符集设置为UTF-8:
引导:
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.view.encoding = "UTF-8"
resources.db.params.charset = "utf8"
编辑:现在我可以在页面中显示特殊字符,但当我从数据库检索元素时,特殊字符不会显示
- 转义字符串返回
(null
)$this->escape($string)
将特殊字符替换为echo$string
?
utf8\u decode()
来显示它们。有什么建议吗
谢谢你的帮助 您是否也尝试过将标题设置为utf8?通常在php中,我是这样做的
header ('Content-type: text/html; charset=utf-8');
在你的情况下,我认为你必须使用不同的东西。我举了一个例子,也许你应该使用不同的东西,我不是Zend_框架的专家
// Within an action controller action:
// Set a header
$this->getResponse()
->setHeader('Content-Type', 'text/html')
->appendBody($content);
如果您设置了头、元和编码,它应该可以工作(从您的代码来看,您似乎只设置了元和编码)
(看看这个问题来理解我的意思,贝瑞·朗格瑞克的回答:)
编辑-我在本文中还发现了另一个例子,其中它为控制器设置了标题,请看一看,也许这就是您要查找的内容:
这部分可能是您正在寻找的:
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;
}
我曾经用多种语言开发ZF应用程序,包括RTL语言。 我曾经把它添加到我的引导文件中,我发现它非常整洁 也许这不是一个答案,但我认为这是一个很好的建议:
public function _initMB(){
mb_internal_encoding("UTF-8");
}
有关
mb\u internal\u string
的更多信息,请查看:是否设置了以下选项,以utf8格式从MySQL获取数据
resources.db.params.charset = "utf8"
要使正确的字符显示,必须做三件事:
有关详细信息,请参见。如果需要使用utf8\u encode(),这意味着数据库中的数据不是用utf8编码的。 当你说你的数据库是用“utf8\uUnicode\uCI”编码的时候,实际上并不意味着你的数据是用utf8编码的 要通过使用您显示的任何代码来验证set编码是否与Zend Framework一起工作,非常简单。使用firefox时,只需右键单击页面并单击“查看页面信息”,如果页面上显示“Encoding:UTF8”,则表示您的页面编码正确,但您的数据没有正确编码
如果您使用的是utf8_decode(),则表示Zend无法设置编码。也许您应该尝试编辑源文件,将UTF-8保留为编辑器的编码。有时,即使在HTML标题、数据库编码等中使用UTF-8,如果源文件采用不同的编码,也可能导致此类错误。如果将所有编码和排序规则(如“utf8\u general\u ci”)放在BD中,然后放在application.ini中mysql连接参数的旁边,
resources.db.params.charset=“utf8”
应该可以做到这一点 在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\''
)
),
我也有同样的问题,我在config/autoload/global.php中修复了它 通过设置字符集值:
'db' => [
'adapters' => [
'dummy' => [],
'myadapter' => ['charset' => 'utf-8',],
],
正如其他人所说,我们必须设置编码,在我的Zend框架中,我必须以几乎不同的方式进行设置:
end_Db::factory($dbConfig->adapter, array('host' => $dbConfig->host,
'username' => $dbConfig->username,
'password' => $dbConfig->password,
'dbname' => $dbConfig->dbname,
'charset'=>$dbConfig->charset
ALTER DATABASE skydevel\u skydevfinal字符集utf8mb4 COLLATE utf8mb4\u unicode\u ci;
ALTER TABLE CHU news_注释转换为字符集utf8mb4 COLLATE utf8mb4_unicode_ci代码>
顺便说一下,我的源文件编码设置为utf-8I已经使用布局文件中的这一行将标题设置为utf8:this->headMeta()->appendHttpEquiv('Content-Type','text/html;charset=utf8');但是我也尝试了你的函数头,返回“header()期望参数3很长,字符串在……中给出……谢谢你的链接(chris.lu),但是我尝试将这个函数放在我的引导程序中,它没有改变任何东西不,我认为这一行只设置了“meta”“:这表示html中的
。如果你看到我链接的另一个问题,他们设置了meta和header,但是我不知道如何在Zendt中设置header这个答案很好,但是这样设置响应会破坏phpunit中的单元测试谢谢,我添加了这个函数,但它似乎不起作用。事实上,我没有在配置文件中添加这个资源。现在,我的整个应用程序都设置为UTF-8,但尽管我添加了一个code
标题(“内容类型:text/html;charset=UTF-8”)<代码>代码当我显示pageheader和meta时,源代码中没有显示。要在html中获取元数据,需要添加echo$this->headMeta();在布局脚本中。您可以设置标头(或让Apache为您设置),也可以按照Maxence所述添加meta标记。你不需要标题和meta标记,但这不会造成伤害,meta标记将用作备份。我所有的源文件都是enc