如何解码包含混合内容的字符串(拉丁语&PHP中的UTF-8)


How to decode string with mixed content (Latin & UTF-8) in PHP

我有一个PHP脚本,读取电子邮件/新闻组消息,我发现一个情况下,我有一个文本,这是一个混合阿拉伯语&拉丁词,即

PHP and ARABIC_WORD

PHP and الساعة

问题是,文本是编码的,即

Some Text =?utf-8?b?RVByaW50cyBhbmQg2KfZhNi52LHYqNmK2Kk=?=

我的问题是我怎么能解码这个?utf-8?...当它与拉丁文本混合?

我使用的是PHP 5.4.15

您得到的是在电子邮件消息中用于非US-ASCII编码文本的MIME encoded - word语法:

格式为:"=?charset?encoding?encoded text?=" .

  • charset可以是在IANA注册的任何字符集。通常情况下,它将与消息正文相同的字符集。
  • encoding可以是"Q",表示Q编码,类似于带引号的可打印编码,也可以是"B",表示base64编码。
  • encoded text是q编码或base64编码的文本。- 编码字长度不得超过75个字符,包括字符集编码编码文本分隔符。如果需要编码多于75个字符的编码词,可以使用多个编码词(用CRLFSP分隔)。

这段摘自维基百科的小片段也包含了如何解码字符串。当然,您不是第一个需要这样做的人,因此存在库。参见:

    在PHP中处理邮件解析/解码的最佳方式?
  • 正确的方式解码传入的电子邮件主题(utf8)

似乎是编码文本:尝试使用PHP函数base64_decode.

$my_string = 'test string';
$res = base64_encode($my_string);
echo $res; //dGVzdCBzdHJpbmc=
echo base64_decode($res); // test string

实际上,解码你的字符串:

base64_decode("RVByaW50cyBhbmQg2KfZhNi52LHYqNmK2Kk=")

返回如下内容:

EPrints and العربية