2012-07-02 37 views
0

我正在使用基於php的mime解析器。如果主體包含像Iñtërnâtiônàlizætiøn這樣的字符串,我們會看到它正在轉換爲Iñtërnâtiônàlizætiøn。有人可以建議如何處理(什麼功能)這樣的字符串?在php中處理多字節字符

所以我們在做以下

  1. 使用Zend庫連接到IMAP服務器

    mail = new Zend_Mail_Storage_Imap($params); 
    
  2. 閱讀循環使用

    $message = $mail->getMessage($i); 
    

    消息。

  3. 當我們打印$message時,我們看到字符串例如Iñtërnâtiônàlizætiøn,打印爲Iñtërnâtiônà lizætiøn

我需要的是如果有某種方法可以保留原始字符串?這只是我們可能碰到的其他多字節字符的一個例子,那麼我們該怎麼知道我們如何處理這個一般的問題呢?

+0

你能展示造成問題的代碼嗎?你看過PHP的[多字節函數](http://php.net/manual/en/book.mbstring.php)嗎? – lonesomeday

+0

你不知道你在做什麼,但你應該看看['mb_ *'functions](http://php.net/manual/en/book.mbstring.php)。 – PeeHaa

+0

http://www.php.net/manual/en/ref.mbstring.php – TigerTiger

回答

0

有沒有具體的功能對於這一點,你只需要簡單地對待它在編碼字符串,字符串就是個字節的BLOB,它就會通過無論是解釋這些字節的文本變成字符。而且有些東西需要使用正確的編碼,否則這些字節不會被解釋爲它們應該是的字符。請參閱Handling Unicode Front To Back In A Web App瞭解常見陷阱。

0

正如在註釋中提到的那樣,您可以使用php mb_ *函數來處理多字節字符。這裏只是檢測字符串編碼的例子:

$s="Iñtërnâtiônàlizætiøn"; 
echo mb_detect_encoding($s); //UTF-8 

,那麼你可以用這個工作,使用utf8_decode($ S)或任何MB_功能將字符串轉換到你希望的編碼。

+0

'mb_detect_encoding' *大部分是無用的,因爲實際上不可能精確檢測未知的編碼。 *知道*你的文本是什麼編碼(應該是),不要猜測。 – deceze