【问题标题】:Display text in UTF-8 charset without wrong characters以 UTF-8 字符集显示文本,没有错误字符
【发布时间】:2020-02-10 16:10:00
【问题描述】:

我有一个包含一些内容的文本文件,我想在我的网页上显示它。我正在以这种方式加载内容:

$txt = file_get_contents('new.txt');

当我使用charset=UTF-8 显示内容时,它看起来像这样:

当我改用charset=ISO-8859-1 时,它看起来像这样:

我希望文本看起来像第二个示例,但使用 charset=UTF-8 而不是 ISO-8859-1。如何转换文本以使其正确显示?

【问题讨论】:

  • UTF-8 all the way through的可能重复
  • 如果您确定所有源文本文件都采用 ISO-8859-1 编码,您可以简单地使用iconv 将它们转换为 UTF-8 后再显示。 This answer 建议通过stream_filter_append 使用iconv,这是处理大文件的绝妙技巧。
  • 值得一提的是,您可以简单地将find所有文本文件批量iconv全部。如果您将来要拥有所有 UTF-8 文本文件,这是清理旧数据的方法,从而在显示时避免转换。

标签: php html utf-8 iso-8859-1


【解决方案1】:

您可以处理原始数据或即时转换。

如果您打算将所有新数据以 UTF-8 格式存储,那么批量转换所有旧数据会更有利。在原始数据中混合编码并不好玩。您可以参考this question 查找批量转换命令建议。

另一方面,如果您要将输入和存储保持在 ISO-8859-1 编码中,您唯一能做的就是即时转换文档。

$txt = iconv('iso-8859-1', 'utf-8', file_get_contents('new.txt'));

或者如果您的源文件有混合编码iso-8859-1和其他未知编码,您可以添加//IGNORE标志以防止错误:

$txt = iconv('iso-8859-1', 'utf-8//IGNORE', file_get_contents('new.txt'));

这需要更多的计算能力来每次显示页面。因此,最好总是转换原始内容(除非您的情况不可能)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2011-06-15
    • 2012-01-14
    • 1970-01-01
    • 2011-08-03
    • 2016-09-14
    • 2022-08-16
    相关资源
    最近更新 更多