PHP IMAP 保存图片、附件时不能正确获取文件名

2022-08-19 09:45:54 +08:00
 s609926202
{
      "type": 3,
      "encoding": 3,
      "ifsubtype": 1,
      "subtype": "VND.MS-EXCEL",
      "ifdescription": 0,
      "ifid": 0,
      "bytes": 158344,
      "ifdisposition": 1,
      "disposition": "attachment",
      "ifdparameters": 1,
      "dparameters": [
        {
          "attribute": "filename",
          "value": "=?GBK?Q?EQ=3Ffor=3FY578B-1&ampampY578B-2=B6=FE=BF=EE=BA=CF=C6=B4&amp?=   =?GBK?Q?nbsp&ampnbsp=3FJ008798H04A0=3F4281=3F.xls?="
        }
      ],
      "ifparameters": 1,
      "parameters": [
        {
          "attribute": "name",
          "value": "=?GBK?Q?EQ=3Ffor=3FY578B-1&ampampY578B-2=B6=FE=BF=EE=BA=CF=C6=B4&amp?=   =?GBK?Q?nbsp&ampnbsp=3FJ008798H04A0=3F4281=3F.xls?="
        }
      ]
}

上图是其中一个附件,使用 mb_decode_mimeheader 获取不到真正的文件名,未正确解码的都被标记为 ? ,结果如下:

"EQ?for?Y578B-1&ampampY578B-2 二款合拼&ampnbsp&ampnbsp?J008798H04A0?4281?.xls"

其中 ? 其实是下划线 _

所以请问如何能获取到正确的文件名?

1391 次点击
所在节点    PHP
3 条回复
Rache1
2022-08-19 11:05:44 +08:00
源文件名是啥呀,不然怎么判断解出来的是不是对得上
s609926202
2022-08-19 11:22:28 +08:00
@Rache1 文件名正确是这个:EQ_for_Y578B-1&Y578B-2 二款合拼  _J008798H04A0_4281_.xls
reter
2022-08-19 12:44:17 +08:00
搜索了一下,rfc 2047 规定了邮件里面如何表达非 ascii 编码的文本,你发的文字就是经过 rfc 2047 规则编码的文本。我不懂 php ,但是 https://www.php.net/manual/en/function.imap-mime-header-decode.php 好像可以用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/873896

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX