0

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

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

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

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

4

3 回答 3

2

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

在 PHP 中,您可以在入口点(在 Zend 框架中的“index.php”文件)发送编码:

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

在您的 HTML 布局中,您应该将 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" />

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

于 2012-03-09T12:09:14.483 回答
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);)。

于 2012-03-09T10:45:50.580 回答
1

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

mb_internal_encoding('utf-8');
iconv_set_encoding('internal_encoding', 'utf-8');
于 2012-05-24T00:00:18.567 回答