3

有没有办法解码这个字符串?

实际字符串:其他语言测试 - testing

base64 编码,同时作为主题发送邮件

"=?iso-2022-jp?B?GyRCQjZCPjhsOEBCLDtuGyhCIC0gdGVzdGluZw==?="

<?php
echo base64_decode('GyRCQjZCPjhsOEBCLDtuGyhCIC0gdGVzdGluZw==');
?>

这是base 64编码,我无法将其解码为实际的中文字符串。由于它已使用“iso-2022-jp”进行编码,我也尝试过在线base64decode.org网站来解码此字符串,但我不能找到原始字符串,我该怎么做?

4

3 回答 3

13

使用iconv()

<?php
$input = base64_decode('GyRCQjZCPjhsOEBCLDtuGyhCIC0gdGVzdGluZw==');//$BB6B>8l8@B,;n(B - testing
$input_encoding = 'iso-2022-jp';
echo iconv($input_encoding, 'UTF-8', $input); //其他語言測試 - testing
?>
于 2013-09-17T05:52:12.390 回答
2

您正在查看的是 MIME 标头编码。它可以由 解码,并由mb_decode_mimeheader()生成mb_encode_mimeheader()。例如:

<?php
mb_internal_encoding("utf-8");
$subj = "=?iso-2022-jp?B?GyRCQjZCPjhsOEBCLDtuGyhCIC0gdGVzdGluZw==?=";
print mb_decode_mimeheader($subj);
?>

其他語言測試 - testing

(此处调用 tomb_internal_encoding()是必要的,因为主题行的内容无法以 ISO8859-1 的默认内部编码表示。)

于 2013-09-17T06:12:13.553 回答
1

尝试先将字符串编码为 UTF-8,然后将其编码为 base 64。解码时相同,先从 base64 解码字符串,然后再从 UTF-8 解码。这对我有用:

php > $base = "其他語言測試 - testing";
php > $encoded = base64_encode(utf8_encode($base));
php > $decoded = utf8_decode(base64_decode($encoded));
php > echo ($decoded === $base) . "\n";
1
于 2013-09-17T05:48:44.990 回答