【问题标题】:file_get_contents() returning invalid characters for uploaded word documentfile_get_contents() 为上传的 word 文档返回无效字符
【发布时间】:2013-05-23 11:44:47
【问题描述】:

我正在尝试从上传的文本文件中获取前 1,000 个字符。我在做:

if($file->simpletype=="document"){
    //get first 1000 chars in here
    $snippet = file_get_contents($_FILES['upload']['tmp_name'], false, null, -1, 1000);
    file_put_contents('/var/www/my_logs/log.log', $snippet);
    $file->snippet = $snippet;
}

这适用于 .txt 文件,我可以使用 gedit 打开和读取 log.log 文件。但是,对于 .doc.docx.odt.pdf 文件,file_get_contents() 会返回诸如此类的乱码:PK\00\00\00\

我尝试了在 stackoverflow 上找到的另一种解决方案:

function file_get_contents_utf8() {
    $content = file_get_contents($_FILES['upload']['tmp_name'], false, null, -1, 1000);
    return mb_convert_encoding($content, 'UTF-8',
             mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}

但我得到了相同的结果。有任何想法吗?谢谢!

【问题讨论】:

  • 你期待什么?这些是二进制文件。
  • 如果您尝试在文本编辑器中打开完整文件,您会遇到同样的问题。它们不是开始的文本文件,所以如果你只取前 1000 行,就不会突然看起来像它

标签: php character-encoding


【解决方案1】:

您正在尝试从不使用纯文本格式的文件中读取文本。

要阅读 doc/docx 文件,您需要使用 PHPDocxhttp://phpword.codeplex.com 之类的工具。

解析PDF请参考this question的回答。

【讨论】:

    【解决方案2】:

    这永远不会适用于非纯文本文件。您需要先从 doc/pdf/odt 文档中获取纯文本,然后才能操作该文本。只需在记事本等简单的文本编辑器中打开这些文档中的任何一个,然后查看其内容。

    对于 Word 文档,您可以以 http://phpword.codeplex.com/ 开头。还要寻找可用于从这些文件中提取内容的其他库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多