问题描述
|
我已发送主题行为
[BILLING #PHY-945-49853]: [Ticket #12622] Payment Method
但是在消息的来源中,该行如下所示
Subject: =?UTF-8?B?W1NBTEVTICNCQk4tOTM1LTM3OTE3XTogW1RpY2tldCAjMTI2MjjdiFBheW1lbnQ=?=
=?UTF-8?B?IE1ldGhvZA==?=
它在Base64中编码。如何使用PHP将其解码回英语的原始主题行?我已经尝试过使用PHPbase64_decode($subject)
,但是它并未将其解码为原始主题([BILLING#PHY-945-49853]:[Ticket#12622]付款方式)
我还附有示例电子邮件:
Return-Path: .........
X-Original-To: ..........
Delivered-To: ........
Received: ......
X-DKIM: ........
Received:....
To: ....
Subject: =?UTF-8?B?W1NBTEVTICNCQk4tOTM1LTM3OTE3XTogW1RpY2tldCAjMTI2MjjdiFBheW1lbnQ=?=
=?UTF-8?B?IE1ldGhvZA==?=
From: =?UTF-8?B?U0FWVllFSE9TVElORyBTQUxFUw==?=
X-Priority: ..
X-MSMail-Priority: normal
X-MimeOLE: Produced By Kayako Fusion v4.01.204
X-Mailer: Kayako Fusion v4.01.204
Reply-To: .......
Date: .....
Content-Type: multipart/alternative;
boundary=\"=_1.64496c432f57488924404b338155a2d7\"
MIME-Version: 1.0
Message-Id: ....
这是MIME格式的消息。如果看到此消息,则您的邮件阅读器不支持此格式。
--=_1.64496c432f57488924404b338155a2d7
Content-Type: text/plain;
charset=\"UTF-8\"
Content-transfer-encoding: quoted-printable
Content-disposition: inline
------------------------------------------------------
Support Center:
Content-Type: text/html;
charset=\"UTF-8\"
Content-transfer-encoding: quoted-printable
Content-disposition: inline
解决方法
您可能正在寻找iconv_mime_decode。
从链接:
string iconv_mime_decode ( string $encoded_header [,int $mode = 0 [,string $charset =
ini_get(\"iconv.internal_encoding\") ]] )
解码MIME标头字段。
你的例子:
echo iconv_mime_decode($string);
产量:
Subject: [SALES #BBN-935-37917]: [Ticket #12622] Payment
,我也遇到了这个问题,并想出了另一种方法来解决此问题。对于未来的其他人来说,这可能会有所帮助。
一旦意识到消息的哪一部分实际上是字符串的Base64部分,就将这些代码拼凑在一起。
if(stripos($subject,\"=?utf-8?b?\") !== false) {
$output = str_ireplace(\"=?utf-8?B?\",\"\",$subject);
$output = str_replace(\"==?=\",$output);
$output = base64_decode($output);
}else{
$output = $subject;
}
实际上,您正在执行的操作是检测字符串是否位于面base64中。然后修剪标识符,然后用ѭ9解码
确保使用字符串功能的不区分大小写的版本,因为并非所有邮件提供程序都使用大写或小写字母。
**很抱歉回答一个老问题,但我发现这是一个更有用的选择。