Getting special characters out of a MySQL database with PHP
我有一张包含特殊字符的表,例如?.
这个字符可以使用phpmyadmin和其他软件输入和查看,但是当我使用php中的select语句输出到浏览器时,我会得到带有问号的菱形。
表类型为myisam。编码为UTF-8 Unicode。排序规则是utf8_unicode_ci。
HTML头的第一行是
1 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
在输出字符串之前,我尝试对其使用htmlEntities()函数。运气不好。
我还尝试在任何输出之前将其添加到PHP中(没有区别):
1 |
最后,我尝试在初始mysql连接的正下方添加此项(这会导致显示额外的奇数字符):
1 |
我错过了什么?
下面的代码适用于我。
1 2 3 4 5 6 7 | $sql ="SELECT * FROM chartest"; mysql_set_charset("UTF8"); $rs = mysql_query($sql); header('Content-type: text/html; charset=utf-8'); while ($row = mysql_fetch_array($rs)) { echo $row['name']; } |
有几件事可能会有所帮助。首先,即使在头段中将字符集设置为utf-8,这可能还不够。我以前看到过浏览器忽略这一点。尝试通过在HTML头部添加以下内容来强制执行:
1 | <meta charset='utf-8'> |
接下来,如本文所述,尝试这样做:
1 2 3 | mysql_query ("set character_set_client='utf8'"); mysql_query ("set character_set_results='utf8'"); mysql_query ("set collation_connection='utf8_general_ci'"); |
编辑
所以我刚刚读了一些关于游戏的文章。首先,让我告诉你,尽管我在评论中提到了这些,但
如果您对数据库结果做了任何操作(特别是以任何方式操作字符串),并且没有使用php mbstring库中的Unicode感知函数,那么它可能会把它弄乱,因为标准php字符串函数不支持Unicode。
一旦您了解了UTF-8编码的工作原理,您就可以这样做:
它会像这样倾倒:
1 | 11100010 10000100 10100010 |
这是一个正确编码的utf-8'?'性格。如果从数据库中检索到的数据中没有这样的字符,那么就会出现一些混乱。
要进行检查,请尝试使用
如果返回的不是
您需要先执行以下查询。
1 |