2010-08-20 53 views
1

我正在zend框架中构建一个需要对所有语言都支持UTF8的web应用程序。 这似乎工作得很好,除了像stripslashes等功能。Zend Framework应用程序是否需要用于UTF8支持的mbstring?

在此URL,只讲使用MBSTRING http://developer.loftdigital.com/blog/php-utf-8-cheatsheet

是否有必要使用MBSTRING我的服务器上,并通过他们的MB-变种取代的UTF8,不能功能所有出现?

Zend Framework是否支持UTF8? 如果没有,我们不得不将ZF代码库中的所有函数替换为它们的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的现有应用程序吗?还是会“降级优雅”?

+1

只需稍加说明:您不应该在ZF中使用mail(),而应该使用[Zend_Mail](http://zendframework.com/manual/en/zend.mail.html)。 – wimvds 2010-08-20 11:35:44

回答

1

是不是Zend Framework Suppost到 支持UTF8?

我不知道。只是grep通过代码寻找strlen例如,但你仍然需要看看代码,以确定它是否在一个不是多字节安全的上下文中使用。快速谷歌搜索显示这http://www.iezzi.ch/archives/371,所以看起来ZF准备UTF8应用程序。

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

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

3

我不认为超载的所有功能与mb_string将是一件好事, 我们都知道,PHP不处理UTF8本身,所以我们使用类似

“集名称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阵列

我无法得到工作,而无需使用MB串 因为PHP不处理完成UTF8本地:(

我爱MB字符串时,它使我的生活更轻松

编辑: 我的意思说的是使用MBSTRING只要你需要它,并让管理框架本身,我不喜欢自动重载所有功能

3

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

唯一需要告诉Zend Framework的是UTF-8是数据库连接,您可以通过charset选项(请参阅Zend_Db或Zend_Application文档)简单地执行此操作。您当然也希望通过内容类型标题告诉用户代理您输送的字符集。并且不要忘记在标签中添加accept-charset =“utf-8”。

+0

谢谢,你能告诉我为什么我在阅读标准的字符串函数在PHP中像strlen不适用于UTF8或日语,阿拉伯语等语言...我读过,我需要使用mbstring for – Jorre 2010-08-23 13:05:10

+0

所有PHP字符串函数都不是多字节安全的,意味着它们全都按字节操作。如果您需要多字节安全功能,则应首先查看iconv_ *(例如iconv_strlen),因为默认情况下iconv库已内置到PHP中。如果您在那里找不到合适的功能,那么您可以查看mb_ *。 甚至有两个函数不存在于这些函数中的任何一个,它们是word_wrap()和strpad()。我通过Zend_Text_MultiByte中的iconv实现了这些。 – DASPRiD 2010-08-24 08:19:12

相关问题