Zend Framework应用程序是否需要mbstring来支持UTF8?

时间:2010-08-20 11:09:18

标签: zend-framework utf-8 internationalization mbstring

我正在zend框架中构建一个需要UTF8支持所有语言的Web应用程序。 这似乎工作正常,除了像stripslashes等函数。

在此网址上,他们讨论了如何使用MBSTRING http://developer.loftdigital.com/blog/php-utf-8-cheatsheet

是否有必要在我的服务器上使用mbstring并用MB-variant替换所有出现无UTF8功能的函数?

Zend Framework不支持UTF8吗? 如果没有,我们必须将ZF-codebase中的所有函数替换为mb_替代品,对吧?这是一项不可能完成的任务,因为升级到新的ZF会破坏我们的代码。

mail()      -> mb_send_mail()
strlen()    -> mb_strlen()  
strpos()    -> mb_strpos()
strrpos()   -> mb_strrpos()
substr()    -> mb_substr()
strtolower()    -> mb_strtolower()
strtoupper()    -> mb_strtoupper()
substr_count()  -> mb_substr_count()
ereg()      -> mb_ereg()
eregi()     -> mb_eregi()
ereg_replace()  -> mb_ereg_replace()
eregi_replace() -> mb_eregi_replace()   
split()     -> mb_split()

你对此有什么建议,我可能完全错了? 我读到了关于使用:

mbstring.func_overload  = 7 ;

自动重载所有功能。

这会破坏不需要UTF8的现有应用程序,还是“优雅地降级”?

3 个答案:

答案 0 :(得分:3)

我不认为使用mb_string重载所有函数会很好, 我们都知道PHP本身不处理utf8所以我们使用像

这样的东西

“SET NAMES utf8”用于数据库&我们使用Zendmail +将编码作为参数传递给它,让Zend邮件自己在内部管理

另一个示例是Zend_Validate_StringLength它有一个名为encoding的参数,它在函数中使用iconv

 public function setEncoding($encoding = null)
    {
        if ($encoding !== null) {
            $orig   = iconv_get_encoding('internal_encoding');
            $result = iconv_set_encoding('internal_encoding', $encoding);
            if (!$result) {
                require_once 'Zend/Validate/Exception.php';
                throw new Zend_Validate_Exception('Given encoding not supported on this OS!');
            }

            iconv_set_encoding('internal_encoding', $orig);
        }

        $this->_encoding = $encoding;
        return $this;
    }

但是你总是会在你的应用程序中使用某个与框架无关的逻辑中的mb_string。

例如昨天我正在整理一个utf8数组的post&来自数据库的评论

如果不使用mb字符串,我无法完成工作  因为php本身不处理utf8 :(

我喜欢它让我的生活更轻松

编辑: 我想说的是在需要的时候使用mbstring,让框架管理自己,我不喜欢自动重载所有函数。

答案 1 :(得分:3)

不要,我只能重复,不要使用mbstring重载。它肯定会破坏任何方法,例如,依赖于strlen()返回字节数。 Zend Framework中的所有组件都默认使用UTF-8,但如果你告诉它,它可以处理不同的字符集。这是通过iconv_ *来完成的,默认情况下它是内置在PHP中的,所以没有像mbstring这样的额外库的依赖。

唯一的问题是你必须告诉Zend Framework关于UTF-8是你的数据库连接,你可以通过charset选项简单地完成(参见Zend_Db或Zend_Application文档)。您当然还想通过内容类型标题告诉用户代理您提供的字符集。不要忘记在标签中添加accept-charset =“utf-8”。

答案 2 :(得分:1)

  

Zend Framework不支持   支持UTF8?

我不知道。例如,只需查看代码搜索strlen,但您仍需要查看代码以确定它是否在非多字节安全的上下文中使用。快速谷歌搜索显示了这个http://www.iezzi.ch/archives/371所以似乎ZF已经为UTF8应用做好了准备。

  

对此我有什么建议,我可能会这样   完全错了吗?我读到了   使用:mbstring.func_overload = 7;   这会破坏现有的吗?   不需要UTF8或的应用程序   它会“优雅地降级”吗?

当然它也适用于非多字节字符串而不会破坏它。但在使用它之前,我建议确保你真的需要它,因为它会降低性能。