有一种 doc
文件, office word
可以正常打开,但当你想像其他 doc
文件一样使用 libreoffice
去操作它的时候会发现里面全是字符串,使用一个编辑器(比如 Sublime Text
)打开后发现,里面的内容是这样的:
From:<由XXX 生成>
Subject: Resume
MIME-Version:1.0
X-51JOB-FLAG:EhireExport_20190527_15590388
Content-Type:multipart/related;boundary="--boundary_0_9ed30801b0c180c69b3c5d74fede848e"
----boundary_0_9ed30801b0c180c69b3c5d74fede848e
Content-Type:text/html;charset="gb2312"
Content-Transfer-Encoding:base64
PGh0bWw+PGJvZHk+PHRhYmxlIHdpZHRoPSc3MDInIGhlaWdodD0nNjInIGJvcmRlcj0nMCcgYWxp
Z249J2NlbnRlcicgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz48dHI+PHRkIHdpZHRo
PSc2MiUnIGhlaWdodD0nNTAnIGFsaWduPSdsZWZ0JyB2YWxpZ249J2JvdHRvbScgY2xhc3M9J3Rv
cCc+PGJyIC8+uPzQwsqxvOSjujxzcGFuIHN0eWxlPSJjb2xvcjojMjU2ZmI4OyI+MjAxOS0wNS0y
Mzwvc3Bhbj48L3RkPjx0ZCB3aWR0aD0nMzclJyBhbGlnbj0ncmlnaHQnIHZhbGlnbj0nYm90dG9t
Jz48aW1nIHdpZHRoPScxMjAnIGhlaWdodD0nNTAnIHNyYz0iY2lkOjZjM2U4MmRjLTNhZGEtNDNj
MS05NDdjLTc3OWY2YzI5MWRjZiIgLz48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgd2lkdGg9Ijcw
MyIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9
IjAiID48dHI+PHRkPjxodG1sIHhtbG5zOmNvZGU9InVybjplaGlyZS54c2x0LmV4dGVuc2lvbiI+
PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7
IGNoYXJzZXQ9Z2IyMzEyIj48c3R5bGU+DQogICAgICAgICAgI3RvcENoYXJ0eyBiYWNrZ3JvdW5k
...
经过一番探究,这是一份被编码的邮件格式文件,既然邮件格式,当然是有东西可以把它解码的,又经过一番探究,我找到了这个包php-mime-mail-parser/php-mime-mail-parser,于是就有了办法。
注意,在使用 php-mime-mail-parser
之前,需要安装 php
的 mailparse
扩展,请参考项目 GitHub
,上代码:
public function actionMht()
{
$file = Yii::getAlias('@runtime') . '/20190527.doc';
if($this->isMht($file)) {
$parser = new PhpMimeMailParser\Parser();
$parser->setText(file_get_contents($file));
$body = $parser->getMessageBody('html');
$body = str_replace(['charset=gb2312','charset=gbk'], 'charset=utf-8', $body);
$htmlFile = Yii::getAlias('@runtime') . '/20190527.html';
file_put_contents($htmlFile, $body);
}
}
public function isMht($file)
{
$fileData = fopen($file, "r");
$header = '';
while(!feof($fileData))
{
$data = str_replace(["\n", "\s", "\r\n"], '', fgets($fileData));
$header .= $data;
if($data == '') {
break;
}
}
fclose($fileData);
return strpos($header, 'MIME-Version') !== false;
}
先通过 MIME-Version
特征去判断是不是这种格式,然后使用 php-mime-mail-parser
解析,然后将其存储为 html
文件并将编码 html
转换成 utf-8
完成转换,这些特征提取和编码转换只是根据项目中的文件来判断,如果你也是这种文件,可以针对自己待处理的文件做出相应的调整以达到更好的效果。
这个解析器还有很多其他内容提取的方法,非常方便,更多用法参考 GitHub
。
php-mime-mail-parser
项目 GitHub
地址:php-mime-mail-parser/php-mime-mail-parser
标题:使用php-mime-mail-parser解析邮件扩展格式的doc文件
原文链接:https://beltxman.com/2585.html
若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。