Zend framework2 在Zend Framework 2中将默认编码设置为ISO

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()。由于编码

我正在从事一个基于ZF1的遗留项目,该项目使用ISO-8859-1字符集。服务器的默认编码也是ISO。新模块应使用ZF2实现。在ZF2中,如何将默认编码(例如转义符等)全局设置为UTF-8以外的任何编码?

如果您直接在模块中使用转义符,这将是一个问题。如果仅使用视图帮助器,则可以选择设置编码

每个转义器视图帮助程序(
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编码。有关更多信息,请访问