在php中处理多字节字符

时间:2012-07-02 08:26:49

标签: php internationalization

正在开发基于php的mime解析器。如果正文包含Iñtërnâtiônàlizætiøn之类的字符串,我们会看到它已转换为Iñtërnâtiônàlizætiøn。有人可以建议如何处理这些字符串(什么功能)?

所以我们正在做以下

  1. 使用Zend Library连接到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
  4. 我需要的是,如果我们可以保留原始字符串?这只是我们可能遇到其他多字节字符的一个例子,那么我们应该知道如何处理这个问题呢?

2 个答案:

答案 0 :(得分:0)

没有特定的函数,你只需要处理它所在的编码中的字符串。字符串只是一个字节的blob,它会被的任何字符变成字符将这些字节解释为文本。并且那些东西需要使用正确的编码,否则这些字节不会被解释为它们应该是的字符。有关常见陷阱的详细信息,请参阅Handling Unicode Front To Back In A Web App

答案 1 :(得分:0)

如注释中所述,您可以使用php mb_ *函数来处理多字节字符。以下是检测字符串编码的示例:

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

然后您可以使用它,使用utf8_decode($ s)或任何mb_函数将字符串转换为您希望的编码。