UTF-8:正确地显示在数据库中,但不是在HTML尽管UTF-8字符集(UTF-8: showing

2019-06-24 01:48发布

我使用MySQL 5.1和从UTF-8加载解码的txt文件约2.7密耳线到其本身被声明为表utf8_unicode_ci和以及所有字符字段被声明为utf8_unicode_ci ,使用LOAD DATA INFILE ...

在数据库本身的人物似乎都是正确的,一切看起来不错。 然而,当我使用PHP打印出来,字符显示为???,虽然我在HTML头使用UTF-8的声明:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...

在另一个表(使用UTF-8),在这里我插从提交的格式文本,人物奇怪出现在数据库中,但再次显示正确,当我打印出来使用SELECT...

所以,我想知道:什么是错的? 是UTF-8正确的数据库或奇怪的字符显示,但是当你SELECT一次他们,他们还好吗? 还是哪里出了问题(文件加载到数据库时,在HTML或介于两者之间)?

非常感谢你对任何提示或建议! :)

Answer 1:

注: MySQL的utf8字符集是有限的,它仅支持在BMP会占用不超过三个字节的Unicode字符。 您应该使用utf8mb4代替。

  • 请确保您发送SET NAMES utf8 SET NAMES utf8mb4运行任何的MySQL查询之前命令到MySQL连接后,。
  • 确保你的网页实际上是呈现为UTF-8(如果有一个HTTP标头Content-Type: text/html;charset=iso-8859-1 ,浏览器不同意这应该赢)。
  • 阅读这篇文章: 处理Unicode的前向后在一个Web应用程序 (但记得要更换utf8utf8mb4其中MySQL的关注)。

如果phpMyAdmin的显示您所输入的数据是正确的Unicode文本,那么我敢打赌,你是不是做SET NAMES utf8连接后。



Answer 2:

尝试连接到数据库后,使用这些代码,但之前打个电话收到数据

$db->query('set character_set_client=utf8');
$db->query('set character_set_connection=utf8');
$db->query('set character_set_results=utf8');
$db->query('set character_set_server=utf8');


文章来源: UTF-8: showing correctly in database, however not in HTML despite utf-8 charset