MySQL,PHP和HTML charset困境

时间:2016-11-22 21:19:52

标签: php mysql utf-8 character-encoding

  • 所以我有一堆MySQL表,其varchar字段是utf8_general_ci
  • php的default_charset是utf8
  • 最后,我在我的html标题<meta charset="UTF-8">
  • 中将字符集设置为utf8

此数据库中的文本用几种不同的语言编写,从英文到中文。

许多'e'都有重音,他们使用时髦的引号。

没有绒毛,这些特殊字符都作为黑色钻石中的问号输出到屏幕上(2除外)。

通过简单地将变量包装在utf8_encode($string)中,一切都很好......除了那些2。

第一个问题:如果所有内容都已设置,我为什么需要使用utf8_encode

第二个问题:有几个条目使用♀和♂(它们就像存储在数据库中一样)。这些显示为简单的问号(没有黑色钻石)。我对他们做了什么并不重要,他们不会改变。我已尝试过utf8_encodeutf8_decodehtmlspecialcharshtmlspecialchars_decode的所有可能组合。没有。唯一的解决方案是将数据库条目更改为使用&#9792作为♀,然后在没有任何漏洞的情况下输出正确。为什么呢?

1 个答案:

答案 0 :(得分:0)

对于中文和表情符号,你需要utf8mb4而不是utf8。

对于黑色钻石,请在this Q&A中搜索。它说

  • SELECT的连接(或SET NAMES)不是utf8mb4。解决这个问题。
  • 另外,检查数据库中的列是否为CHARACTER SET utf8mb4。

由于您似乎使用的是PHP,但没有说明您使用的是php artisan view:clear 还是mysqli,我会将您推荐给PHP checklist

如果您有PDO,那么您可以将符号转换为&#34; html实体&#34;,也许使用PHP&#39; &#9792;?不要在客户端使用任何转换工具,只会让事情变得更糟。