2

我的一个项目从网上提取了一份文档并阅读了它。本文档由第三方提供,不会更改(内容会更改,但格式和其他内容不会更改)。问题是该文档包含从 Word 中复制和粘贴的内容,即 UTF-8,但是该文档以 ISO-8858-1 编码,因此这些字符作为“?”保存到数据库中。

如果我跳过文本,然后用 UTF-8 重新编码,而不是得到 smartquotes 和 em 破折号,我只会得到两个垃圾字符。

如何将此带有 UTF-8 字符的 ISO-8859-1 文档转换回 UTF-8,以便它可以像最初创建的那样显示?

4

3 回答 3

4
$fixed = mb_convert_encoding($broken, "UTF-8", "ISO-8859-1");

不知道它是否能正确处理嵌入在 8859 中的 UTF-8,但这是“正常”的做法。手册页在这里。试一试,看看事情是否变得更干净或更严重。

于 2011-03-02T20:26:49.150 回答
3

我在这里找到了解决方案:PHP:将“'”字符从 ISO-8859-1 转换为 UTF-8 时出现问题

服务器声称它提供的是 ISO-8859-1,但实际上是 Windows-1252,它可以毫无问题地转换为 UTF-8。

于 2011-03-02T20:30:27.847 回答
0

幸运的是,ISO 8859-1 是 8 位透明的。因此,您可以使用iconvmb_convert_encodingutf8_encode解码内容。

我不确定“我通过文本”是什么意思,但如果这真的是指定为 ISO 8859-1 的 UTF-8,请尝试消除所有中间文本操作。如果仍然失败,请提供(短)输入文档的示例。很有可能它实际上并不是指定为 ISO 8859-1 的 UTF-8。

于 2011-03-02T20:27:35.950 回答