2012-10-17 127 views
1

我正在使用基於使用ISO-8859-1字符集的ZF1的遺留項目。此外,服務器的默認編碼是ISO。新模塊應該使用ZF2來實現。默認編碼如何對於逃犯等等,在全球範圍內設置爲ZF2以外的其他任何東西都不是UTF-8?在Zend Framework 2中將默認編碼設置爲ISO

+0

到目前爲止,似乎沒有可靠的方法來全局更改編碼。要走的道路似乎是使用utf-8在ZF2中實現新功能,並在數據庫中繼續使用latin1編碼。可以在 http://zend-framework-community.634137.n4.nabble.com/ZF2-Set-default-encoding-to-ISO-in-Zend-Framework-2-td4657670.html上找到更多信息。 cid = 1350893416289-363 – griesi

回答

1

如果您直接在模塊中使用escapers,這將是一個問題。如果僅使用視圖助手,則可以選擇設置編碼。

每個助手視圖助手(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); 
    } 
    } 
} 

這應該糾正所有插件的ISO-8859-1編碼。如果您的任何模塊或任何第三方模塊使用助手視圖助手,則將使用ISO-8859-1編碼。

+0

感謝您指點我正確的方向。這似乎基本上工作。但是如果你使用「StringTrim」過濾器,它仍然依賴於utf-8。我猜是因爲StringTrim Filter沒有將編碼轉換爲acount。您可以通過以下測試重現它。這可以以某種方式克服,或者我需要寫我自己的StrinTrim過濾器 $ filter = new \ Zend \ Filter \ StringTrim(); var_dump($ filter-> filter('äöüas')); – griesi

+0

似乎也適用於StringToLower和HtmlEntities過濾器以及像StringLength這樣的驗證器。我無法看到如何在Bootstrap上設置全局。到目前爲止,似乎每次使用時都必須明確設置。真的嗎? – griesi

相關問題