在 php 中处理多字节字符


Handling Multibyte characters in php

我正在研究基于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

我需要的是是否有某种方法可以保留原始字符串?这只是我们可能会遇到其他多字节字符的一个例子,那么我们通常如何处理这个问题呢?

没有特定的函数,你只需要按照它的编码处理字符串。字符串只是一团字节,它通过将这些字节解释为文本的任何内容转换为字符。并且某些东西需要使用正确的编码,否则这些字节不会被解释为它们应该的字符。请参阅在 Web 应用程序中从前到后处理 Unicode,了解常见陷阱的概要。

注释中所述,您可以使用 PHP mb_* 函数来处理多字节字符。这里只是一个检测字符串编码的示例:

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

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