hbi*_*bit 4 php email encoding utf-8
想要将以下原始邮件转换为正常的UTF-8文本:
=?utf-8?Q?Schuker_hat_sich_vom_ = C3 = 9Cbungsabend_(01.01.2012)_abgem?= =?utf-8?Q?eldet?=
真正的文字是:
Schuker hat sichvomÜbungsabend(01.01.2012)abgemeldet
我的第一种转换方法:
$mime = '=?utf-8?Q?Schuker_hat_sich_vom_=C3=9Cbungsabend_(01.01.2012)_abgem?= =?utf-8?Q?eldet?=';
mb_internal_encoding("UTF-8");
echo mb_decode_mimeheader($mime);
Run Code Online (Sandbox Code Playgroud)
这给了我以下结果:
Schuker_hat_sich_vom_Übungsabend_(01.01.2012)_abgemeldet
(这里的问题:我做错了什么?为什么会出现这些下划线?)
我的第二种转换方法:
$mime = '=?utf-8?Q?Schuker_hat_sich_vom_=C3=9Cbungsabend_(01.01.2012)_abgem?= =?utf-8?Q?eldet?=';
echo imap_utf8($mime);
Run Code Online (Sandbox Code Playgroud)
这给了我以下(正确)结果:
Schuker hat sichvomÜbungsabend(01.01.2012)abgemeldet
为什么这样做?我应该依靠哪种方法?
我问的原因是我以前曾要求另一个邮件主题解码相关的问题在哪里mb_decode_mimeheader解决方案,而这里imap_utf8将是要走的路.我怎样才能确保为这两个示例解码所有正确的内容:
=?utf-8?Q?Schuker_hat_sich_vom_ = C3 = 9Cbungsabend_(01.01.2012)_abgem?= =?utf-8?Q?eldet?
和
=?UTF-8?B?UmU6ICMyLUZpbmFsIEFjY2VwdGFuY2UgdGVzdCB3aXRoIG5ldyB0ZXh0IHdpdGggU2xvdg ==?= =?UTF-8?B?YWsgaW50ZXJwdW5jdGlvbnMgIivEvsWhxI3FpcW + w73DocOtw6khxYgi?=
应该给我预期的结果:
Schuker hat sichvomÜbungsabend(01.01.2012)abgemeldet
和
回复:#2 - 最终验收测试,带有斯洛伐克语中间节点的新文本"+ľščťžýáíé!"
基于hbit响应,我改进了imapUtf8()使用charset信息将主题文本转换为UTF-8的功能.结果如下:
function imapUtf8($str){
$convStr = '';
$subLines = preg_split('/[\r\n]+/', $str);
for ($i=0; $i < count($subLines); $i++) {
$convLine = '';
$linePartArr = imap_mime_header_decode($subLines[$i]);
for ($j=0; $j < count($linePartArr); $j++) {
if ($linePartArr[$j]->charset === 'default') {
if ($linePartArr[$j]->text != " ") {
$convLine .= ($linePartArr[$j]->text);
}
} else {
$convLine .= iconv($linePartArr[$j]->charset, 'UTF-8', $linePartArr[$j]->text);
}
}
$convStr .= $convLine;
}
return $convStr;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4711 次 |
| 最近记录: |