【问题标题】:Displaying some sort of apostrophe (Currently shows as diamond)显示某种撇号(目前显示为菱形)
【发布时间】:2012-07-24 16:05:45
【问题描述】:

我的数据库中的某些行包含某种撇号,当使用 PHP 显示时,它会转换为中心带有问号的菱形。例如,如果它正确复制:Captain Jim O’Brien

这些“撇号”很可能是通过 TinyMCE 插入的,用户从 Word 或 Mac 计算机中复制和粘贴。

如何显示这些“撇号”?当我在 PHPMyAdmin 中查看该行时,会显示撇号(没有菱形),所以显然有办法。

我的字符编码设置为 UTF-8,我尝试了 htmlspecialchars($string)htmlentities($string),但没有成功。

【问题讨论】:

  • 你试过htmlentities($string, ENT_QUOTES, 'UTF-8');吗?对于字符编码,您应该始终指定您正在使用的编码(UTF8 等) - 如果您还没有。
  • @newfurniturey 当名称包含无效撇号时,它实际上显示一个空白名称。
  • 也许这会对你有所帮助:developer.loftdigital.com/blog/php-utf-8-cheatsheet
  • @newfurniturey 它看起来是空白的,因为它实际上是在抛出 Invalid multibyte sequence 错误。

标签: php html character-encoding


【解决方案1】:

字符在不同的地方编码。

MySQL 具有特定的字符编码。默认情况下,不是 UTF-8,而是 latin1。

您使用 PHP 生成的 HTML 文档还指定了特定的字符编码。最后,HTML 文档中的实际字节实际上采用了特定的字符编码,如果您不小心,它可能与您为文档指定的字符编码不同。

首先验证您的 MySQL 编码是否设置为 UTF-8。请注意,MySQL 可以在每个表甚至每个列的基础上覆盖数据库的默认字符编码。

您可能对这篇相关文章感兴趣,以更深入地了解字符编码

Character Encoding and the ’ Issue

更新

首先将数据放入 MySQL 数据库。也许那个“东西”没有使用 UTF-8 编码。

【讨论】:

  • 表的 MySQL 排序规则:utf8_general_ci。 HTML 文档已设置<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  • 排序规则不同于字符编码。检查编码(虽然如果排序规则是基于 utf8 的,编码是可能 utf8)
  • 另外...当您在正确显示撇号的页面上查看源代码时,您在 PHPMyAdmin 中看到的编码是什么?是UTF8还是别的什么?
  • 使用show variables like "character_set_database";,我得到了latin1。所以,我意识到我可能需要将数据库的编码更改为 UTF-8。话虽如此,PHPMyAdmin 以某种方式在不更改数据库的情况下显示它。源代码显示他们将Content-Type 设置为UTF8
  • PHPMyAdmin 似乎将撇号显示为 ’,但我不确定他们是如何将其转换为的?
猜你喜欢
  • 1970-01-01
  • 2016-08-06
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 2015-10-04
  • 2015-10-27
  • 1970-01-01
相关资源
最近更新 更多