尝试几件事后,获取特殊字符的问号。我还能尝试什么?

时间:2016-05-23 09:14:53

标签: php mysql utf-8 phpmyadmin collation

我正在努力使用我网站上的特殊字符编码。我有input字段,其中已连接datalist。加载页面时,将从我的数据库中填充datalist。但不知何故,我在钻石符号中为数据列表选项中的每个特殊字符和特殊语言字符(例如中文)的普通问号获得了这些问号。这是我试过的:

  1. 初始数据集是一个csv文件,我将其包含在我的数据库中。我在Notepad ++中检查了排序规则,并将其设置为 UTF8,没有BOM
  2. 我使用phpmyadmin进行数据库管理。服务器连接排序规则设置为 utf8mb4_bin 。我存储数据的表具有归类 utf8_bin 。当我导入数据时,我确保使用 utf8 。这些字符也在phpmyadmin中正确显示。
  3. 在我的index.php文件的<head>部分,我还有以下<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  4. 但我仍然得到那些问号。我还能检查什么?

2 个答案:

答案 0 :(得分:0)

您可以使用此代码段轻松检查从DB检索的字符串是否有效。 如果它是有效的UTF-8,则问题出在表示层。

if(mb_detect_encoding($str, 'UTF-8', true)){ die('I\'m a valid UTF-8 string, YAY :D '); }

答案 1 :(得分:0)

  

我使用phpmyadmin进行数据库管理。服务器连接排序规则设置为utf8mb4_bin。 我存储数据的表格具有排序规则utf8_bin 。当我导入数据时,我确保使用utf8。这些字符也在phpmyadmin中正确显示。

这可能是原因,您希望将其更改为utf8mb4_ 整理

其他要点是使用PHP mb_等操作,例如

mb_internal_encoding('UTF-8');
mb_http_output('UTF-8'); 

在PHP页面的顶部。另外,请务必在数据库连接对象中设置 connection 字符集:

$this->MySQLiObjectVariable->set_charset("utf8mb4"); 

set_charset Manual Page

经常发生的是,当MySQL storage 设置正确且PHP输出设置正确时,两者之间的通信被设置为系统默认值,通常不是最佳字符集。给定数据(通常为latin1_utf8_)。

忽略Meta字符集声明并实际使用直接HTML标头设置它们通常也是有益的,例如:

<?php
header('Content-Type: text/html; charset=utf-8');

出现在HTML内容之前的输出页面上,确保浏览器以UTF-8的形式接收数据。

另请阅读UTF-8 all the way through