我有 MySQL 字段,其中包含纯文本西里尔字符(例如 Широка поляна)。排序规则是utf8_general_ci
.
当我用 MySQL 查询提取这个内容并尝试用 php 输出它时,我总是得到 ???? 符号。HTML 编码是 utf8,文档编码是 utf8,mb_detect_encoding()
显示字符串的 ASCII,但 PHP / MySQL 转换函数都没有将其转换为可读的东西。
对于过时的 mysql 驱动程序,它必须是
mysql_set_charset('utf8');
对于 mysqli
$mysqli->set_charset('utf8');
对于 PDO,您必须在 DSN 中设置编码:
$dsn = "mysql:host=localhost;dbname=test;charset=utf8";
在 php 文件的第一行使用
header('Content-Type: text/html; charset=utf-8');
您必须为数据库连接设置字符集。出于这个原因,您可以使用 mysql_set_charset 函数。
mysql_set_charset('utf8',$link1);
更多信息: http: //php.net/mysql_set_charset
您很可能会通过不设置连接编码来犯非常常见的错误。它通常在my.ini
配置文件中完成,但恕我直言,更好的方法是始终在您的代码中强制执行此操作。为此,只需执行以下查询:
SET NAMES encoding;
即对于utf8,它将是:
SET NAMES utf8;
您只需在连接到数据库后执行此操作,并且每次连接执行一次。