我正在使用PHP imap函数来读取接收UTF-8编码的纯文本电子邮件(由另一台服务器生成)的邮箱。重音字符替换为问号(?)。下面是我的代码,以下是修复它的两次尝试。我该如何解决这个问题?我无法控制生成消息的服务器,但他们声称它们是UTF-8编码的。 mb_detect_encoding说imap_body函数返回一个ASCII字符串,但我发现mb_detect_encoding在过去有些错误。
public class Main{
public static void main(String[] args) {
myFirstTest myfirst = new myFirstTest();
myfirst.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myfirst.setSize(400,400);
myfirst.setVisible(true);
}
我尝试了以下转换为UTF-8,即使消息已经是UTF-8:
$connection = imap_open( '{localhost:993/ssl/novalidate-cert}INBOX', 'xxxxxxx', 'xxxxxxx', 0, 1 );
$result = imap_search( $connection, 'UNSEEN' );
if ( $result )
{
foreach ( $result as $msgno )
{
$body = imap_body( $connection, $msgno );
// ... (code to process the message) ...
imap_mail_move( $connection, "$msgno:$msgno", 'INBOX.processed' );
}
imap_expunge( $connection );
imap_close( $connection );
}
}
我也尝试过:
$current_encoding = mb_detect_encoding( $body, 'auto' ); // Returns "ASCII"
$body = mb_convert_encoding( $body, $current_encoding, 'UTF-8' );
答案 0 :(得分:0)
以下是解决方案:我抓住了生成电子邮件的人员,他们进行了以下标题更改:
Content-type: text/html; charset=UTF-8
Content-transfer-encoding: quoted-printable
解决了它。我的PHP程序现在可以看到UTF-8字符。
答案 1 :(得分:0)
获取电子邮件正文后
useByteArray
使用下面的代码
解码消息正文$body = imap_body( $connection, $msgno );
对$ subject使用相同的逻辑..
有关详细信息,请参阅imap_utf8