Use base64_decode decoding of PHP to return false

[problems encountered]

try to use PHP"s base64_decode function to decode the content of a message that is encoded with Base64, but find that some messages return false. According to my test, it seems that the parts containing non-Base64 codes can be decoded normally after they are deleted, but according to the documentation--

string base64_decode ( string $data [, bool $strict = false ] )

when strict is set to TRUE, FALSE is returned once the data entered exceeds the base64 alphabet. Otherwise, will invalid characters be silently discarded?

what should I do if I want to decode messages with non-encoded content?

[related codes]

example of the content of the message to be decoded. only those "- = _ Part_." that are deleted from the beginning and tail. To decode successfully, otherwise false is returned.

<?php
  $str="------=_Part_52_1608986047.1312859369078 Content-Type: multipart/alternative; boundary="----=_Part_53_1114408905.1312859369078" ------=_Part_53_1114408905.1312859369078 Content-Type: text/plain; charset="gb18030" Content-Transfer-Encoding: base64 1eLKx9K7t+JIVE1MuPHKvdPKvP6jrMfrx9C7u7W9SFRNTMrTzbw ------=_Part_53_1114408905.1312859369078 Content-Type: text/html;charset=UTF-8 Content-Transfer-Encoding: base64 PG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+PHRhYmxlIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJmb250 LWZhbWlseTpNaWNyb3NvZnQgWWFIZWksU2ltc3VuO3dpZHRoOjc1MHB4O3RhYmxlLWxheW91dDpm aXhlZDsiICBiZ2NvbG9yPSIjZmZmZmZmIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAi Pjx0Ym9keT48dHI+PHRkIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij7lhaXpl6gyOTwvdGQ+PC90cj4g PHRyPjx0ZD48dGFibGUgc3R5bGU9IndpZHRoOjc1MHB4OyIgYm9yZGVyPSIwIiBjZWxscGFkZGlu Zz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQgc3R5bGU9IndpZHRoOjc1MHB4O2hlaWdodDox MDBweDtmb250LWZhbWlseTpNaWNyb3NvZnQgWWFIZWksU2ltc3VuO2JhY2tncm91bmQ6IzE3MjAz ZjsiPjxpbWcgc3JjPSJodHRwOi8vbWltZy4xMjcubmV0L2h6L3VwbG9hZGVyLzIwMTgxMDI3LzE1 NDA2MDYzOTg2Njk3OTk0LmpwZWciIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2JvcmRlcjowOyIvPjwv dGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj4gIDx0cj48dGQ+PHRhYmxlIHN0eWxlPSJ3aWR0aDo3 NTBweDsiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRk IHN0eWxlPSJ3aWR0aDo3NTBweDtoZWlnaHQ6MTAwcHg7Zm9udC1mYW1pbHk6TWljcm9zb2Z0IFlh SGVpLFNpbXN1bjtiYWNrZ3JvdW5kOiMxNzFmM2Y7Ij48aW1nIHNyYz0iaHR0cDovL21pbWcuMTI3 Lm5ldC9oei91cGxvYWRlci8yMDE4MTAyNy8xNTQwNjA2Mzk4ODcyNzk5NS5qcGVnIiBzdHlsZT0i ZGlzcGxheTpibG9jaztib3JkZXI6MDsiLz48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+ICA8 dHI+PHRkPjx0YWJsZSBzdHlsZT0id2lkdGg6NzUwcHg7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5n PSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZCBzdHlsZT0id2lkdGg6NzUwcHg7aGVpZ2h0OjEw MHB4O2ZvbnQtZmFtaWx5Ok1pY3Jvc29mdCBZYUhlaSxTaW1zdW47YmFja2dyb3VuZDojMTgyNjQw OyI+PGltZyBzcmM9Imh0dHA6Ly9taW1nLjEyNy5uZXQvaHovdXBsb2FkZXIvMjAxODEwMjcvMTU0 MDYwNjM5OTEwODc5OTYuanBlZyIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ym9yZGVyOjA7Ii8+PC90 ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPiAgPHRyPjx0ZD48dGFibGUgc3R5bGU9IndpZHRoOjc1 MHB4OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQg c3R5bGU9IndpZHRoOjc1MHB4O2hlaWdodDoxMDBweDtmb250LWZhbWlseTpNaWNyb3NvZnQgWWFI ZWksU2ltc3VuO2JhY2tncm91bmQ6IzEyMjY0MDsiPjxpbWcgc3JjPSJodHRwOi8vbWltZy4xMjcu bmV0L2h6L3VwbG9hZGVyLzIwMTgxMDI3LzE1NDA2MDYzOTkzNDk3OTk3LmpwZWciIHN0eWxlPSJk aXNwbGF5OmJsb2NrO2JvcmRlcjowOyIvPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj4gIDx0 cj48dGQ+PHRhYmxlIHN0eWxlPSJ3aWR0aDo3NTBweDsiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9 IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkIHN0eWxlPSJ3aWR0aDo3NTBweDtoZWlnaHQ6MTAw cHg7Zm9udC1mYW1pbHk6TWljcm9zb2Z0IFlhSGVpLFNpbXN1bjtiYWNrZ3JvdW5kOiMxMDJhNDA7 Ij48aW1nIHNyYz0iaHR0cDovL21pbWcuMTI3Lm5ldC9oei91cGxvYWRlci8yMDE4MTAyNy8xNTQw NjA2Mzk5NTU2Nzk5OC5qcGVnIiBzdHlsZT0iZGlzcGxheTpibG9jaztib3JkZXI6MDsiLz48L3Rk PjwvdHI+PC90YWJsZT48L3RkPjwvdHI+ICA8dHI+PHRkPjx0YWJsZSBzdHlsZT0id2lkdGg6NzUw cHg7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZCBz dHlsZT0id2lkdGg6NzUwcHg7aGVpZ2h0OjEwMHB4O2ZvbnQtZmFtaWx5Ok1pY3Jvc29mdCBZYUhl aSxTaW1zdW47YmFja2dyb3VuZDojMWQxOTNmOyI+PGltZyBzcmM9Imh0dHA6Ly9taW1nLjEyNy5u ZXQvaHovdXBsb2FkZXIvMjAxODEwMjcvMTU0MDYwNjM5OTc5Nzc5OTkuanBlZyIgc3R5bGU9ImRp c3BsYXk6YmxvY2s7Ym9yZGVyOjA7Ii8+PC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPiAgPHRy Pjx0ZD48dGFibGUgc3R5bGU9IndpZHRoOjc1MHB4OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0i MCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQgc3R5bGU9IndpZHRoOjc1MHB4O2hlaWdodDoxMDBw eDtmb250LWZhbWlseTpNaWNyb3NvZnQgWWFIZWksU2ltc3VuO2JhY2tncm91bmQ6IzFkMTkzZjsi PjxpbWcgc3JjPSJodHRwOi8vbWltZy4xMjcubmV0L2h6L3VwbG9hZGVyLzIwMTgxMDI3LzE1NDA2 MDY0MDAwMDg4MDAwLmpwZWciIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2JvcmRlcjowOyIvPjwvdGQ+ PC90cj48L3RhYmxlPjwvdGQ+PC90cj4gIDx0cj48dGQ+PHRhYmxlIHN0eWxlPSJ3aWR0aDo3NTBw eDsiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkIHN0 eWxlPSJ3aWR0aDo3NTBweDtoZWlnaHQ6MTAwcHg7Zm9udC1mYW1pbHk6TWljcm9zb2Z0IFlhSGVp LFNpbXN1bjtiYWNrZ3JvdW5kOiMxZDE5M2Y7Ij48aW1nIHNyYz0iaHR0cDovL21pbWcuMTI3Lm5l dC9oei91cGxvYWRlci8yMDE4MTAyNy8xNTQwNjA2NDAwMjQwODAwMS5qcGVnIiBzdHlsZT0iZGlz cGxheTpibG9jaztib3JkZXI6MDsiLz48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+ICA8dHI+ PHRkPjx0YWJsZSBzdHlsZT0id2lkdGg6NzUwcHg7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIw IiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZCBzdHlsZT0id2lkdGg6NzUwcHg7aGVpZ2h0OjEwMHB4 O2ZvbnQtZmFtaWx5Ok1pY3Jvc29mdCBZYUhlaSxTaW1zdW47YmFja2dyb3VuZDojMWQxOTNmOyI+ PGltZyBzcmM9Imh0dHA6Ly9taW1nLjEyNy5uZXQvaHovdXBsb2FkZXIvMjAxODEwMjcvMTU0MDYw NjQwMDQ0NDgwMDIuanBlZyIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ym9yZGVyOjA7Ii8+PC90ZD48 L3RyPjwvdGFibGU+PC90ZD48L3RyPiAgPHRyPjx0ZD48dGFibGUgc3R5bGU9IndpZHRoOjc1MHB4 OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQgc3R5 bGU9IndpZHRoOjc1MHB4O2hlaWdodDoxMDBweDtmb250LWZhbWlseTpNaWNyb3NvZnQgWWFIZWks U2ltc3VuO2JhY2tncm91bmQ6IzFkMTkzZjsiPjxpbWcgc3JjPSJodHRwOi8vbWltZy4xMjcubmV0 L2h6L3VwbG9hZGVyLzIwMTgxMDI3LzE1NDA2MDY0MDA2NzY4MDAzLmpwZWciIHN0eWxlPSJkaXNw bGF5OmJsb2NrO2JvcmRlcjowOyIvPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj4gIDx0cj48 dGQ+PHRhYmxlIHN0eWxlPSJ3aWR0aDo3NTBweDsiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAi IGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkIHN0eWxlPSJ3aWR0aDo3NTBweDtoZWlnaHQ6MTAwcHg7 Zm9udC1mYW1pbHk6TWljcm9zb2Z0IFlhSGVpLFNpbXN1bjtiYWNrZ3JvdW5kOiMxZDE5M2Y7Ij48 aW1nIHNyYz0iaHR0cDovL21pbWcuMTI3Lm5ldC9oei91cGxvYWRlci8yMDE4MTAyNy8xNTQwNjA2 NDAwOTA1ODAwNC5qcGVnIiBzdHlsZT0iZGlzcGxheTpibG9jaztib3JkZXI6MDsiLz48L3RkPjwv dHI+PC90YWJsZT48L3RkPjwvdHI+ICA8dHI+PHRkPjx0YWJsZSBzdHlsZT0id2lkdGg6NzUwcHg7 IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZCBzdHls ZT0id2lkdGg6NzUwcHg7aGVpZ2h0OjEwMHB4O2ZvbnQtZmFtaWx5Ok1pY3Jvc29mdCBZYUhlaSxT aW1zdW47YmFja2dyb3VuZDojMWQxOTNmOyI+PGltZyBzcmM9Imh0dHA6Ly9taW1nLjEyNy5uZXQv aHovdXBsb2FkZXIvMjAxODEwMjcvMTU0MDYwNjQwMTE0MDgwMDUuanBlZyIgc3R5bGU9ImRpc3Bs YXk6YmxvY2s7Ym9yZGVyOjA7Ii8+PC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPiAgPHRyPjx0 ZD48dGFibGUgc3R5bGU9IndpZHRoOjc1MHB4OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIg Y2VsbHNwYWNpbmc9IjAiPjx0cj48dGQgc3R5bGU9IndpZHRoOjc1MHB4O2hlaWdodDoxMDBweDtm b250LWZhbWlseTpNaWNyb3NvZnQgWWFIZWksU2ltc3VuO2JhY2tncm91bmQ6IzFkMTkzZjsiPjxp bWcgc3JjPSJodHRwOi8vbWltZy4xMjcubmV0L2h6L3VwbG9hZGVyLzIwMTgxMDI3LzE1NDA2MDY0 MDEzNTQ4MDA2LmpwZWciIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2JvcmRlcjowOyIvPjwvdGQ+PC90 cj48L3RhYmxlPjwvdGQ+PC90cj4gIDx0cj48dGQ+PHRhYmxlIHN0eWxlPSJ3aWR0aDo3NTBweDsi IGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkIHN0eWxl PSJ3aWR0aDo3NTBweDtoZWlnaHQ6MTAwcHg7Zm9udC1mYW1pbHk6TWljcm9zb2Z0IFlhSGVpLFNp bXN1bjtiYWNrZ3JvdW5kOiMxZDE5M2Y7Ij48aW1nIHNyYz0iaHR0cDovL21pbWcuMTI3Lm5ldC9o ei91cGxvYWRlci8yMDE4MTAyNy8xNTQwNjA2NDAxNTU4ODAwNy5qcGVnIiBzdHlsZT0iZGlzcGxh eTpibG9jaztib3JkZXI6MDsiLz48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+ICA8dHI+PHRk Pjx0YWJsZSBzdHlsZT0id2lkdGg6NzUwcHg7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBj ZWxsc3BhY2luZz0iMCI+PHRyPjx0ZCBzdHlsZT0id2lkdGg6NzUwcHg7aGVpZ2h0OjEwMHB4O2Zv bnQtZmFtaWx5Ok1pY3Jvc29mdCBZYUhlaSxTaW1zdW47YmFja2dyb3VuZDojMWQxOTNmOyI+PGlt ZyBzcmM9Imh0dHA6Ly9taW1nLjEyNy5uZXQvaHovdXBsb2FkZXIvMjAxODEwMjcvMTU0MDYwNjQw MTc5MDgwMDguanBlZyIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ym9yZGVyOjA7Ii8+PC90ZD48L3Ry PjwvdGFibGU+PC90ZD48L3RyPiAgPHRyPjx0ZD48dGFibGUgc3R5bGU9IndpZHRoOjc1MHB4OyIg Ym9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQgc3R5bGU9 IndpZHRoOjc1MHB4O2hlaWdodDoxMDBweDtmb250LWZhbWlseTpNaWNyb3NvZnQgWWFIZWksU2lt c3VuO2JhY2tncm91bmQ6IzFkMTkzZjsiPjxpbWcgc3JjPSJodHRwOi8vbWltZy4xMjcubmV0L2h6 L3VwbG9hZGVyLzIwMTgxMDI3LzE1NDA2MDY0MDIwMjA4MDA5LmpwZWciIHN0eWxlPSJkaXNwbGF5 OmJsb2NrO2JvcmRlcjowOyIvPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj4gIDx0cj48dGQ+ PHRhYmxlIHN0eWxlPSJ3aWR0aDo3NTBweDsiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNl bGxzcGFjaW5nPSIwIj48dHI+PHRkIHN0eWxlPSJ3aWR0aDo3NTBweDtoZWlnaHQ6MTVweDtmb250 LWZhbWlseTpNaWNyb3NvZnQgWWFIZWksU2ltc3VuO2JhY2tncm91bmQ6IzFkMTkzZjsiPjxpbWcg c3JjPSJodHRwOi8vbWltZy4xMjcubmV0L2h6L3VwbG9hZGVyLzIwMTgxMDI3LzE1NDA2MDY0MDIy NTE4MDEwLmpwZWciIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2JvcmRlcjowOyIvPjwvdGQ+PC90cj48 L3RhYmxlPjwvdGQ+PC90cj4gIDx0cj48dGQ+PHRhYmxlIHN0eWxlPSJ3aWR0aDo3NTBweDsiIGJv cmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PC90cj48L3RhYmxl PjwvdGQ+PC90cj4gPC90Ym9keT48L3RhYmxlPjxJTUcgU1JDPSJodHRwOi8vY291bnQubWFpbC4x NjMuY29tL2JlYWNvbi9lZG0uZ2lmP25vPTYwNTY1Mzg4JmRvbWFpbj1lbWFpbCZkYXRlPTIwMTgx MDI5JnVpZD0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxkaXYgY2xhc3M9ImRtLXVuc3ViLWRpdiI+ PGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy10b3A6MTVweDtmb250LXNpemU6 MTBweDtjb2xvcjojNzc3Ij7lpoLmnpzkvaDkuI3mg7Plho3mlLbliLDor6Xkuqflk4HnmoTmjqjo jZDpgq7ku7bvvIzor7fngrnlh7sgPGEgc3R5bGU9ImZvbnQtc2l6ZToxMHB4IiBocmVmPSJodHRw Oi8vZG0ubWFpbC4xNjMuY29tL2Fub255bW91cy9hZHN1YnNjcmliZS91bnN1YnNjcmliZT9kZXBJ ZD0xJnByb0lkPTEwNjAwMyZtaXRJZD02MDU2NTM4OCZzZWM9QjJkTkFCeW10WWg3UzlZa0Y2QWpl R1RqNzRqZWRTMGwiIGhpZGVmb2N1cz0idHJ1ZSI+6L+Z6YeM6YCA6K6iPC9hPjwvZGl2Pg0KPC9k aXY+DQo------=_Part_53_1114408905.1312859369078-- ------=_Part_52_1608986047.1312859369078--
";

  $text=base64_decode($str);
  var_dump($text);
  echo $text;
?>

[attempts made]

switching to imap_base64 was also unsuccessful.

[Test Environment]

XAMPP
operating system: Windows 10 Family Chinese version 1803
Apache version: 2.4.16 (Win32)
PHP version: 5.6.12

Jan.15,2022

is not how to decode base64.


your $str variable obviously needs to be parsed and then decoded.
if I guess correctly, the original text should be cut according to the newline character, where Content-Transfer-Encoding identifies the encoding format, and the body is the string to be decoded.
it is recommended that you separate the parts before decoding them.


the question that base64_decode decoding returns false has been answered clearly by Shangguanyuan Heng .

with regard to the problem of decoding email, I solved it myself by studying the user comments and continuous testing under imap_fetchstructure and imap_fetchbody in the PHP manual.

generally speaking, email is divided into simple and multipart. The encoding obtained by simple using imap_fetchstructure is the actual encoding used by the email; while the email from multipart may contain multiple parts, and each part may contain multiple parts,. The type and encoding of each part of the part may be different, so it needs to be parsed one by one through a loop. Each part can be decoded according to the corresponding encoding, so that there is no problem of non-coding content in the content to be decoded!

can be combined with reference--

  1. comments on user " david at hundsness dot com " under the imap_fetchstructure description in the
  2. PHP manual: PHP:imap_fetchstructure-Manual
  3. comments on user " atamido at gmail dot remove dot com " under the imap_fetchbody description in the
  4. PHP manual: PHP:imap_fetchbody-Manual
Menu