我的一个项目从网上提取文件并阅读。本文档由第三方提供,不会更改(内容会更改,但格式和其他内容不会更改)。 问题是该文档包含内容复制并从Word粘贴,这是UTF-8,但文档是用ISO-8858-1编码的,因此这些字符以“?”形式保存到数据库中。
如果我翻过文本,并以UTF-8重新编码,而不是获取smartquotes和em破折号,我只会得到两个垃圾字符。
如何将带有UTF-8字符的ISO-8859-1文档转换回UTF-8,以便它可以按照最初创建的方式显示?
答案 0 :(得分:3)
我在这里找到了解决方案:PHP: Problems converting "’" character from ISO-8859-1 to UTF-8
服务器声称它正在提供ISO-8859-1,但它确实是Windows-1252,它可以毫无问题地转换为UTF-8。
答案 1 :(得分:2)
$fixed = mb_convert_encoding($broken, "UTF-8", "ISO-8859-1");
不知道它是否能正确处理8859中嵌入的UTF-8,但这是“正常”的做法。手册页here。给它一个旋转,看看事情是否变得更清洁或更严重。
答案 2 :(得分:0)
幸运的是,ISO 8859-1是8位透明的。因此,您只需使用iconv,mb_convert_encoding或utf8_encode解码内容。
我不确定“我通过文本”是什么意思,但如果这是真正的UTF-8指定为ISO 8859-1,请尝试删除所有中间文本操作。如果仍然失败,请提供(简短)输入文档的示例。实际上它不是真正的UTF-8被指定为ISO 8859-1。