如何在PHP中解码具有混合内容(Latin和UTF-8)的字符串

时间:2013-06-21 16:37:45

标签: php utf-8

我有一个PHP脚本,可以阅读电子邮件/ usenet消息,我发现一个案例,我的文字是混合了阿拉伯语&拉丁语,即

PHP and ARABIC_WORD

PHP and الساعة

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

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

我的问题是如果将此?utf-8?...与拉丁文本混合后如何解码?

我正在使用 PHP 5.4.15

2 个答案:

答案 0 :(得分:3)

您获得的是非US-ASCII编码文本的电子邮件中使用的MIME Encoded-Word语法:

表单为:"=?charset?encoding?encoded text?="

  • charset可以是使用IANA注册的任何字符集。通常它与邮件正文是相同的字符集。
  • encoding可以是“Q”,表示与quoted-printable编码类似的Q编码,或“B”表示base64编码。
  • encoded text是Q编码或base64编码的文本。 - 编码字长度不得超过75个字符,包括 charset 编码编码文本,和分隔符。如果希望编码的文本多于75个字符的编码字,则可以使用多个编码字(由CRLFSP分隔)。

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

答案 1 :(得分:0)

它似乎是编码文本:尝试使用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 العربية