2012-07-02 30 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