使用PHP显示docx文件的内容

时间:2019-04-20 00:46:01

标签: php

我很难显示此docx文件的原始内容。它显示了许多不必要的单词和符号。

这是我要从中提取原始内容的docx文件。

https://www.darlingheadbands.com/wp-content/uploads/2019/04/file.docx

现在我得到一些普通的原始文本,也有一些奇怪的文本,例如下面的文本。

  

PEVuZE5vdGU + PENpdGU + PEF1dGhvcj5Db2hlbjwvQXV0aG9yPjxZZWFyPjIwMDU8L1llYXI + PFJl   Y051bT4wPC9SZWNOdW0 + PElEVGV4dD5PZmYtbGluZSBsZWF​​ybmluZyBvZiBtb3RvciBza2lsbCBt   ZW1vcnk6IGEgZG91YmxlIGRpc3NvY2lhdGlvbiBvZiBnb2FsIGFuZCBtb3ZlbWVudDwvSURUZXh0   PjxEaXNwbGF5VGV4dD4oV2lsbGluZ2hhbSAxOTk5LCBDb2hlbiwgUGFzY3VhbC1MZW9uZSBldCBh

这是我的代码

<?php
function docx_to_text($input_file){
    $xml_filename = "word/document.xml"; //content file name
    $zip_handle = new ZipArchive;
    $output_text = "";
    if(true === $zip_handle->open($input_file)){
        if(($xml_index = $zip_handle->locateName($xml_filename)) !== false){
            $xml_datas = $zip_handle->getFromIndex($xml_index);
            $xml_handle = DOMDocument::loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
            $output_text = strip_tags($xml_handle->saveXML());
        }else{
            $output_text .="";
        }
        $zip_handle->close();
    }else{
    $output_text .="";
    }
    return $output_text;
}

echo docx_to_text("file.docx");
?>

它应该只显示原始文本,而不包含任何图像,表格或格式。只是纯文本。

1 个答案:

答案 0 :(得分:0)

这对我有用(使用您的文档):

<?php

function read_docx($document)
{
    $content = '';
    $zip = zip_open($document);
    if (!$zip || is_numeric($zip)) return false;
    while ($zip_entry = zip_read($zip))
    {
        if (zip_entry_open($zip, $zip_entry) == FALSE) continue;
        if (zip_entry_name($zip_entry) != 'word/document.xml') continue;
        $content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
        zip_entry_close($zip_entry);
    }
    zip_close($zip);

    $content = str_replace('</w:r></w:p></w:tc><w:tc>', ' ', $content);
    $content = str_replace('</w:r></w:p>', "\r\n", $content);
    $content = preg_replace('/<w:fldData xml:space="preserve">.*<\/w:fldData>/Ums', '', $content);

    return strip_tags($content);
}

echo read_docx('./file.docx');

您看到的奇怪文本与 fldData 条目相关,我不得不删除它们。

我保留了文档属性,如果不需要它们,只需使用preg_replace删除它们。