2010-08-20 58 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

相關問題