我通过IMAP从电子邮件中检索数据,并希望(通过PHP)通过编程方式检测身体是否有中文、日文或韩文字符。我知道编码,但不知道
$mbox = imap_open ("{localhost:995/pop3/ssl/novalidate-cert}", "info@***.com", "********");
$email=$_REQUEST['email'];
$num_mensaje = imap_search($mbox,"FROM $email");
// grab the body for the same message
$body = imap_fetchbody($mbox,$num_mensaje[0],"1");
//chinese for example
$str = mb_convert_encoding($body,"UTF-8","EUC-CN");
imap_close($mbox);任何想法
发布于 2011-11-06 11:37:12
查找信息的规范位置是charset=头中的Content-Type:参数。
不幸的是,提取这一点并不像你希望的那样简单。实际上,您可能认为imap_header返回的对象将包含类型信息,但它不包含,相反,您必须使用imap_fetchheader从消息中获取原始标头,并自己解析它们。
解析RFC822头并不是完全简单的。对于简单的情况,您可以通过将每一行与^content-type:.*; *charset=([^;]+)匹配(case-不敏感)来避免。但是,要真正正确地执行它,您必须通过一个适当的run 822家庭解析器(如MailParse )来运行整个消息头和正文。
然后,您仍然会遇到忽略包含charset信息的消息的问题。对于这种情况,您需要使用mb_detect_encoding。
在本例中,您希望使用与上面相同的方法读取的头是Content-Language。然而,它常常不存在,在这种情况下,你不得不再次回到猜测。CJK统一意味着所有语言都可能使用许多相同的字符,但是有几种启发式方法可以用来猜测:
https://stackoverflow.com/questions/8026548
复制相似问题