【问题标题】:utf8_encode() doesn't really work [duplicate]utf8_encode() 并没有真正起作用[重复]
【发布时间】:2015-11-01 23:36:15
【问题描述】:

utf8_encode() 函数有问题。

这是一个例子

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <?php
    header("Content-Type: text/html; charset=utf-8");
    $str = "Şşİğ";
    echo utf8_encode($str);
    ?>

我看到的输出是

SsIg(第三个是大写的 i)

如果我不使用 utf8_encode() 这就是我得到的

阿阿阿°阿

因此,这对于某些语言实际上并不适用。它只是让它有点意义,而不是让它正确。

谢谢

【问题讨论】:

  • 那里可能有一个额外的字节无法转换。在这种情况下 utf-8 只是忽略它。检查该功能的文档,当某些内容无法转换为 utf8 时,您应该能够自定义被忽略或强制的内容
  • PHP文件的编码是什么?
  • @KarolyHorvath 它也是 UTF-8。公鸡,我试试,谢谢。
  • 如果是utf8,为什么要编码成utf8?我可以重现这种行为并取出 utf8_encode 解决它。该功能适用​​于...Encodes an ISO-8859-1 string to UTF-8
  • 有趣...不过,您应该在任何内容之前发送header("Content-Type: text/html; charset=utf-8");

标签: php


【解决方案1】:

如果字符串的编码已经是 UTF8(而不是 ISO-8859-1(5)),you need do nothing:

utf8_encode — 将 ISO-8859-1 字符串编码为 UTF-8

实际上,在已经是 UTF8 的字符串上运行 utf8_encode 势必会造成某种破坏。

你说文件编码是 UTF8,但你得到的看起来像 ISO-8859。所以我怀疑你有什么东西弄乱了编码链。

验证Content-Type 标头(即验证您设置的那个确实是发送的那个),仔细检查文件编码和浏览器设置(它应该是 UTF8 或自动检测)。

另外,你应该得到“SsIg”是很奇怪的——这绝对是不是 UTF8 编码的预期行为。似乎 something 试图通过将您的字符映射回最相似的 ASCII 字符来将它们映射回 ASCII 集。因此,我还会检查中间的任何代理或缓存或 anything 以操纵脚本发送的数据。

【讨论】:

  • 我检查过,一切似乎都是正确的。奇怪的是,当我在我创建的变量上使用 mb_detect_encoding($str, "auto") 时,它说它们已经是 UTF-8。但是,我看到一些奇怪的东西。还是不明白为什么。
  • 好的,我已经修好了。我在 Windows 上使用 EasyPhp,然后我去重新安装。仔细检查了您所说的所有内容及其现在的工作方式。此外,解决我的问题,你在这里提供了一些非常好的信息。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 2016-12-25
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
相关资源
最近更新 更多