在Zend Framework中设置全局编码

时间:2012-03-09 09:14:05

标签: zend-framework encoding zend-validate

我的引导程序为所有视图设置编码:

protected function _initView () {
    $view = new Zend_View();
    // snip...
    $view->setEncoding('utf-8');
    // snip...
    return $view;
}

但是,这不会为我的表单验证器设置编码。 StringLength使用其默认编码(我不确定它是哪个),它将变音符号视为两个字符。

我知道我可以在创建验证器时设置'encoding' => 'utf-8'选项,但是在我的整个(巨大的)应用程序中更新所有验证器有点麻烦。有没有办法同时为所有验证器设置编码?

3 个答案:

答案 0 :(得分:2)

如果你很早就发送了Content-Type并在HTML-Document中定义了它,通常不会有问题。

在PHP中,你可以在入口点发送编码(在Zend Framework中发送“index.php”-File):

header( 'Content-Type: text/html; charset=utf-8' );

在HTML-Layout中,您应该将META-Tag放在HEAD-Tag中:

<!-- do this only in: HTML5 -->
<meta charset="utf-8" />

<!-- do this only in: HTML4 -->
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

当然,以UTF-8(无BOM)保存项目中的每个源文件(HTML + PHP文件)

答案 1 :(得分:1)

在ZF 1.1x中,StringLength验证程序使用iconv_strlen

int iconv_strlen(string $str [, string $charset = ini_set("iconv.internal_encoding")])

首先要尝试的是调用ini_set(或iconv_set_encoding('internal_encoding', $encoding);)。

答案 2 :(得分:1)

可能有点晚了,但这将是完整的答案:

mb_internal_encoding('utf-8');
iconv_set_encoding('internal_encoding', 'utf-8');