2016-11-22 110 views
1
  • 所以我有一堆MySQL表谁的VARCHAR字段是utf8_general_ci
  • PHP的DEFAULT_CHARSET是UTF8
  • 最后,我设置的字符集为utf8在我的HTML头<meta charset="UTF-8">

此数据库中的文本是用几种不同的语言从英语写入中文。的MySQL,PHP和HTML字符集愁楚

很多'e's都有他们的口音,他们使用时髦的语录。

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

通过简单地在utf8_encode($string)所有包裹的变量是很好...再次,除了那些2.

第一个问题:为什么我需要使用utf8_encode如果一切都已经设置呀?

第二个问题:几个条目使用♀和♂(它们就像那样存储在数据库中)。这些显示为简单的问号(无黑钻石)。不管我对他们做什么,他们都不会改变。我已尝试过utf8_encode,utf8_decode,htmlspecialcharshtmlspecialchars_decode的所有可能组合。没有。唯一的解决方案是将数据库条目更改为例如使用&#9792,然后没有任何绒毛,它就会正确输出。为什么?

+0

如果您的数据不是UTF-8,那么您需要使用'utf8_encode',如果不是,则意味着链接中的某些内容从HTML - >浏览器 - >服务器 - > PHP - >数据库连接 - >数据库。 – tadman

+0

能否详细说明一下?我可能错过了什么?这也不能解释为什么这两个男性和女性角色不工作 –

+0

你需要确保链中的每一步都是UTF8或什么东西会被打破。我不确定你的问题在哪里,但你必须仔细测试每个阶段。 – tadman

回答

0

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

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

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

因为你似乎使用PHP是,但没有说是否要使用mysqliPDO,我会向您推荐PHP checklist

如果您有&#9792;,那么在某处将符号转换为“html实体”,或许使用PHP的htmlentities()?不要在客户端使用任何转换工具,它只会让事情变得更糟。