2013-04-07 172 views
0

我阅读了很多关于如何将UTF-16转换为UTF-8的帖子,但没有人建议如果我同时使用这两种方法。我试图将使用PHP的UTF-16和UTF-8字符的电子邮件正文文本插入到SQL Server 2008表列(UTF-8)中。将UTF-16和UTF-8文本字符串转换为UTF-8

我用iconv()从UTF-16转换为UTF-8,但正如我说,这是不够的,因为它不处理UTF-8:

$email->description_html = iconv("UTF-16","UTF-8//TRANSLIT",$that->getMessageText(
           $msgNo, 'HTML', $structure, $fullHeader,$clean_email)); 
$email->description  = iconv("UTF-16","UTF-8//TRANSLIT",$that->getMessageText(
           $msgNo, 'PLAIN', $structure, $fullHeader,$clean_email)); 

我想这两个UTF-16和UTF-8,但它不工作,给出了一个数据库错误:

can't convert UTF-16 to UTF-8

$email->description_html= iconv('','UTF-8',$that->getMessageText(
           $msgNo, 'HTML', $structure, $fullHeader,$clean_email)); 

我不知道自己还能做什么,请帮助。

+3

在一个文本字符串中不应该有“具有UTF-16和UTF-8”这样的事物。如果是这样,则字符串被破坏。必须有一个指示符说明使用哪种编码,并且只有这种编码。必须信任该指标以将字符转换为其他编码。如果不起作用:指责错误地声明编码不正确的来源。 – Sven 2013-04-07 19:33:40

+0

谢谢Sven,在这种情况下,我在同一封电子邮件中使用了两个ecodings:使用防病毒程序扫描的希伯来字符(UTF-8)的电子邮件,其中添加了一封电子邮件扩展文本,它被验证 - 该电子邮件扩展或称为附件,只是它不完全是一个附件...)是UTF-16(就像NDR - 未送达报告扩展,自动添加到电子邮件文本)。当我尝试插入到数据库(UTF-8)时,出现字符串为UTF-16的错误。当我把它作为UTF-16处理时,我可以不知道有UTF-8的字符。 – Rodniko 2013-04-08 02:46:57

+1

然后你的防病毒程序就被打破了。它不应该使用不同的编码将文本添加到电子邮件正文部分。 – nwellnhof 2013-04-08 13:57:50

回答

1

在一个文本字符串中不应该有“具有UTF-16和UTF-8”这样的事物。如果是这样,则字符串被破坏。必须有一个指示符说明使用哪种编码,并且只有这种编码。必须信任该指标以将字符转换为其他编码。如果不起作用:指责错误地声明编码不正确的来源。

至于电子邮件:有可能有一个多部分邮件有两个(阅读:多于一个)不同的部分与两个不同的多部分头,他们都说不同的编码。处理这一点必须通过应用解析多部分邮件的规则来完成,即不能将整个邮件视为单个字符串,但必须先将这些部分分开 - 然后对每个部分都有一个完全有效的单一编码方案。 :)

+0

术语“多部分邮件”是我一直在寻找的术语。这完全是我的情况!我只是不知道它被称为多部分,所以我不能谷歌它。谢谢! – Rodniko 2013-04-09 04:57:12