【问题标题】:Specify .doc file encoding when creating with php?用php创建时指定.doc文件编码?
【发布时间】:2011-06-08 12:30:23
【问题描述】:

目前我尝试创建一些更自动化的数据库导出工作,我决定将数据从 MySql 数据库导出到 php 中的 .doc 文件。

所以我在做一些数据库工作并将完整的 html 存储到 $str 变量中,然后写入/制作新文件:

$fp = fopen($file, 'w+'); fwrite($fp,$str); fclose($fp);

这里的问题不是创建 .doc 文件,但是当我下载并查看该 .doc 文件时,它不是 UTF-8 格式,而是 unicode 格式。

【问题讨论】:

  • 一个doc文件,为什么不是Excel甚至CSV,甚至可能是json
  • 因为我需要明确的文档。

标签: php


【解决方案1】:

您是否意识到给文件添加.doc 扩展名并不能使其成为 Word 文档?

无论如何,如果您的$str 和 HTML 是用 UTF-8 编码的,那么下载的文件也应该是这样。否则用适当的发送它

header("Content-Type: text/html; charset=UTF-8");

它不能合理地“使用 unicode”。你需要解释这意味着什么。它肯定不会从 UTF-8 自动转换为 UCS-4(任何 4 字节原始 unicode 表示形式)。

但是,您可以包含 UTF-8 BOM 以使其确定:

fwrite($fp, pack("HHH", 0xEF, 0xBB, 0xBF));

【讨论】:

  • 是的,我知道 .doc 扩展名不会使其成为 word 文档。带有 utf-8 标记的标头设置在处理文件的开头。当我在 microsoft word 中打开 .doc 文件时,我看到像“ī”这样的字符是“Ä«”。
  • @arma - 为什么不创建一个真正的 .doc 文件?如果您想要 Woord 2007 .docx 文件,请使用 PHPWord 的 COM
  • @Mark Ba​​ker 问题是我不觉得在我的项目中引入另一个库只是为了生成 1 个表。
  • @arma:发送错误的 MIME 类型以在 Word 中打开文件会通过过滤代理将您的文件标记为潜在漏洞。这是一种解决方法,您对 Word 如何解释伪装成 .doc 文件的 HTML 页面没有太大影响。您可以尝试使可怕的解决方法起作用的唯一另一件事是嵌入<meta http-equiv="content-type" content="text/html;CHARSET=UTF-8"> 和/或="content-charset",也许还可以嵌入一个XML PI。
  • 所以最后我用 utf-8 meta 制作了模板,然后用它来写假的 .doc。现在一切看起来都很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多