根据我从基于 PHP 的电子邮件程序的 mime 字符串中提取 base64 图像字符串的(有限)经验,base64 图像始终在 mime 字符串中的第一对连续 LF (\x0A) 字符之后开始,并且始终遵循mime 内容类型等。情况总是如此并且可靠吗? 谢谢!
我还没有发现这个策略的例外,但我也没有看到这个规范。
例如,使用 GitHub 上的 php-mime-mail-parser 的 $attachment->getMimePartStr() 函数,我得到一个字符串:
内容类型:image/png; name=name.png 内容传输编码:base64 内容处置:附件; filename=name.png iVBORw0KGgoAAAANSUhEUgAAA...等
通过使用 PHP ord() 函数,我检测到两个连续的 \x0A 字符填充 filename=name.png 和 iVBORw0KGgoAAAANSUhEUgAAA... 之间的空格,我可以使用 strpos() 找到这些字符,并使用 substr() 提取base64 字符串 iVBORw0KGgoAAAANSUhEUgAAA... 等等
我想要 iVBORw0KGgoAAAANSUhEUgAAA... 等部分用于
的“数据:”标准正如您所观察到的:
Content-Type: image/png; name=name.png
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=name.png
iVBORw0KGgoAAAANSUhEUgAAA... etc.
直到 MIME 部分结束。内容必须根据 Content-Transfer-Encoding 标头进行解码,不要假设您总是会得到 base64。 然而,不,你不能只依赖LF。您可能会得到 CR/LF 序列,因为它们也是有效的。您可能想查看 RFC 2045 等。