我如何检测字符串的编码,它可以是日语,中文或英语,并转换为utf8显示


How can I detect encoding of a string which can be japanese, chinese or english and convert to utf8 for display?

在一个php网站上,我收到来自imap的电子邮件并将它们保存在数据库中。

另一方面,我想显示其中的一些。那个邮箱收到很多英文邮件,但也有日语和中文的。

我的问题与以下代码是,我不能检测所有的字符集。如果我安排数组的顺序,使中文字符正常,这对其他字符集来说是错误的。

<?php
$subject = "板イテ淌"; // can be japanese
$subject = "这间面积70平"; // can be chinese
$subject = "This string can have latin1 chars also";
function get_subject($subject);
$encs = array();
$enc[] = "Big5";
$enc[] = "big5";
$enc[] = "euc-kr";
$enc[] = "EU-CN";
$enc[] = "GB2312";
$enc[] = "ISO-8859-1";
$enc[] = "GBK";
$enc[] = "CP936";
$enc[] = "ASCII";
$enc[] = "JIS";
$enc[] = "UTF-8";
$enc[] = "EUC-JP";
$enc[] = "SJIS";
$enc[] = "latin1";
$encoding = mb_detect_encoding($this->object_message, $encs);
$subject = mb_convert_encoding($this->object_message, 'UTF-8', $encoding);
$subject = iconv ( 'utf-8', 'ISO-8859-2' , $subject );
return $subject;
?>

如果不能显示它们,也就不能正确地将它们放入数据库。

你不能仅仅通过查看字节来检测编码字节,除了UTF-8,因为它有独特和有限的模式。这就是detect_encoding所做的,因此是无用的除了检测极少量具有排他属性的编码之间的所有内容

当您收到电子邮件时,您应该阅读编码头并使用该编码进行转换将数据转换为UTF-8。不要转换为ISO-8859-2,因为它是一个很小的字符集,你会失去大多数字符。

你可以使用PHP邮件解析器

返回UTF-8格式的邮件内容。