PHP突然UTF8编码问题以前不存在.应用程序未更改


PHP sudden UTF8 encoding issues previously absent. Application not changed

我运行一个个人网站,总是正确显示重音字符。现在,突然之间,它不再存在了。有趣的是,即使它的本地主机版本也没有。

在这方面,应用程序多年来没有改变,下面是它按照给定的顺序所做的:

  1. mysql database set to collation utf8_general_ci

  2. 应用程序发送这两个查询:"设置名称'utf8'整理'utf8'"answers"SET CHARACTER_SET 'utf8'"

  3. Php headers在打印任何内容之前发送以下头:头('的content - type: text/xml;charset = utf - 8"。' r ' n");头(Content-transfer-encoding: utf - 8"。' r ' n");

  4. 每个网页显示一个元标签如下:meta http-equiv="content-type" content="text/html;utf - 8字符集= "/祝辞

然而,现在,突然,字符显示全错了。如果我手动替换字符,它们将按预期显示。但我无法理解是否或什么可能"破坏"了数据库。当然,我无法手动修改数百个帖子。

知道为什么这个奇怪的事情突然发生和建议如何解决它吗?

错误行实例:"Non ho mai avuto l' opportunità di incontrarti di persona "。Non so se èperchèNon ho cercato abbastanza l' o perchè"等…

èè的Mojibake。你以为会有葬礼吗?不管什么改变了或没有改变,让我们看看如何修复它。

查看this查找Mojibake。它说检查/修复这些:

  • 需要存储的字节是utf -8编码的。解决这个问题。
  • 插入和选择文本时需要指定utf8或utf8mb4。解决这个问题。
  • 列需要声明为字符集utf8(或utf8mb4)。解决这个问题。
  • HTML应该以。
  • 开头

还可以查看检查为è存储的HEX的技术:

  • utf8十六进制是C3A8
  • 十六进制C383C2A8意味着你有"双重编码";这将导致其他问题。
  • E8是拉丁十六进制——我怀疑你是否会看到这个。