Zend framework2 在Zend Framework 2中将默认编码设置为ISO
我正在从事一个基于ZF1的遗留项目,该项目使用ISO-8859-1字符集。服务器的默认编码也是ISO。新模块应使用ZF2实现。在ZF2中,如何将默认编码(例如转义符等)全局设置为UTF-8以外的任何编码?如果您直接在模块中使用转义符,这将是一个问题。如果仅使用视图帮助器,则可以选择设置编码 每个转义器视图帮助程序(Zend framework2 在Zend Framework 2中将默认编码设置为ISO,zend-framework2,Zend Framework2,我正在从事一个基于ZF1的遗留项目,该项目使用ISO-8859-1字符集。服务器的默认编码也是ISO。新模块应使用ZF2实现。在ZF2中,如何将默认编码(例如转义符等)全局设置为UTF-8以外的任何编码?如果您直接在模块中使用转义符,这将是一个问题。如果仅使用视图帮助器,则可以选择设置编码 每个转义器视图帮助程序(EscapeCss,EscapeHtml等等)都从Zend\view\helper\escaper\AbstractHelper扩展。此类有一个方法setEncoding()。由于编码
EscapeCss
,EscapeHtml
等等)都从Zend\view\helper\escaper\AbstractHelper
扩展。此类有一个方法setEncoding()
。由于编码不是在所有帮助器实例之间共享的,因此必须单独设置它们,但可以在那里设置编码
例如,您可以在引导过程中设置正确的编码。假设您拥有应用程序模块:
<?php
namespace Application;
use Zend\Mvc\MvcEvent;
class Module
{
public function onBootstrap(MvcEvent $e)
{
$app = $e->getApplication();
$sm = $app->getServiceManager;
$manager = $sm->get('ViewHelperManager');
$plugins = array(escapehtml', 'escapehtmlattr', 'escapejs', 'escapecss', 'escapeurl');
$encoding = 'ISO-8859-1';
foreach ($plugins as $name) {
$plugin = $manager->get($name);
$plugin->setEncoding($encoding);
}
}
}
如果您直接在模块中使用转义符,这将是一个问题。如果仅使用视图帮助器,则可以选择设置编码 每个转义器视图帮助程序(
EscapeCss
,EscapeHtml
等等)都从Zend\view\helper\escaper\AbstractHelper
扩展。此类有一个方法setEncoding()
。由于编码不是在所有帮助器实例之间共享的,因此必须单独设置它们,但可以在那里设置编码
例如,您可以在引导过程中设置正确的编码。假设您拥有应用程序模块:
<?php
namespace Application;
use Zend\Mvc\MvcEvent;
class Module
{
public function onBootstrap(MvcEvent $e)
{
$app = $e->getApplication();
$sm = $app->getServiceManager;
$manager = $sm->get('ViewHelperManager');
$plugins = array(escapehtml', 'escapehtmlattr', 'escapejs', 'escapecss', 'escapeurl');
$encoding = 'ISO-8859-1';
foreach ($plugins as $name) {
$plugin = $manager->get($name);
$plugin->setEncoding($encoding);
}
}
}
谢谢你为我指明了正确的方向。这似乎基本上有效。但是如果使用“StringTrim”过滤器,它仍然依赖于utf-8。我猜是因为StringTrim过滤器不考虑编码。您可以通过以下测试复制它。这是可以克服的,还是我需要编写自己的StrinTrim过滤器$Filter=new\Zend\Filter\StringTrim();变量转储($filter->filter('äöüas');这似乎同样适用于StringToLower和HtmlEntities过滤器以及StringLength等验证器。我看不出如何在bootstrap上全局设置这个。到目前为止,似乎每次使用时都必须显式设置。是真的吗?谢谢你给我指出了正确的方向。这似乎基本上有效。但是如果使用“StringTrim”过滤器,它仍然依赖于utf-8。我猜是因为StringTrim过滤器不考虑编码。您可以通过以下测试复制它。这是可以克服的,还是我需要编写自己的StrinTrim过滤器$Filter=new\Zend\Filter\StringTrim();变量转储($filter->filter('äöüas');这似乎同样适用于StringToLower和HtmlEntities过滤器以及StringLength等验证器。我看不出如何在bootstrap上全局设置这个。到目前为止,似乎每次使用时都必须显式设置。这是真的吗?到目前为止,似乎还没有可靠的方法来全局更改编码。解决的办法似乎是使用utf-8在ZF2中实现新功能,并在数据库中继续使用拉丁1编码。到目前为止,可以在上找到更多的信息,似乎没有可靠的方法来全局更改编码。解决的办法似乎是使用utf-8在ZF2中实现新功能,并在数据库中继续使用拉丁1编码。有关更多信息,请访问