在php中处理多字节字符

在php中处理多字节字符,php,internationalization,Php,Internationalization,我正在研究基于php的mime解析器。如果主体包含类似字符串的Iñtërn–tiën利兹ëtiën我们可以看到它正在转换为IñtërnÃ、tiônÃlizÃti¸n。有人能建议如何处理(什么函数)这样的字符串吗 因此,我们正在做以下工作 使用Zend Library连接到IMAP服务器 mail = new Zend_Mail_Storage_Imap($params); 使用以下命令阅读消息: $message = $mail->getMessage($i); 在循环中 当我

我正在研究基于php的mime解析器。如果主体包含类似字符串的
Iñtërn–tiën利兹ëtiën
我们可以看到它正在转换为
IñtërnÃ、tiônÃlizÃti¸n
。有人能建议如何处理(什么函数)这样的字符串吗

因此,我们正在做以下工作

  • 使用Zend Library连接到IMAP服务器

    mail = new Zend_Mail_Storage_Imap($params);
    
  • 使用以下命令阅读消息:

    $message = $mail->getMessage($i);
    
    在循环中

  • 当我们打印
    $message
    时,我们会看到字符串,例如
    Iñtërnëtiën
    打印为
    IñtërnÃnÃlizÃti¸n

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

    没有特定的函数,只需在编码中处理字符串即可。字符串只是一个字节块,任何将这些字节解释为文本的东西都会将其转换为字符。有些东西需要使用正确的编码,否则这些字节不会被解释为它们应该是的字符。有关常见陷阱的详细信息,请参阅。

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

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

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

    您可以显示导致问题的代码吗?你看过PHP吗?不清楚你在做什么,但你应该看看。至于你的特殊问题:我不知道这方面的Zend类,但你要么需要看看邮件头,邮件的编码是什么,然后根据需要进行转换,或者,您需要配置Zend类以自动将邮件的编码转换为所需的编码。无论如何,您首先需要知道您想要的编码是什么
    mb_detect_编码
    基本上是无用的,因为几乎不可能准确地检测未知编码。知道你的文字应该用什么编码,不要猜测。