通过确保以下内容,您应该能够使查询正常工作:
为 UTF-8 准备 PHP
您首先需要确保将发出这些查询的 PHP 页面作为 UTF-8 编码页面提供。这将确保正确显示来自数据库的任何 UTF-8 输出。在 Firefox 中,您可以通过访问您感兴趣的页面并使用“查看页面信息”菜单项来检查是否是这种情况。当你这样做时,你应该看到UTF-8作为页面的Encoding的值。如果页面不是以 UTF-8 格式提供的,您可以使用以下两种方法之一。您可以在对 的调用中设置编码header()
,如下所示:
header('Content-Type: text/html; charset=UTF-8');
或者,您可以在页面块中使用meta
标签:head
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
为 UTF-8 准备 MySQL
接下来,您需要确保将数据库设置为使用 UTF-8 编码。这可以在服务器、数据库、表或列级别进行设置。如果您在共享主机上,您可能只能控制层次结构的表和列级别。如果您可以控制服务器或数据库,则可以通过发出以下两个命令来检查它们使用的字符编码:
SHOW VARIABLES LIKE 'character_set_system';
SHOW VARIABLES LIKE 'character_set_database';
可以使用如下命令更改数据库级别的编码:
(CREATE | ALTER) DATABASE ... DEFAULT CHARACTER SET utf8;
要查看表使用的字符编码,只需执行以下操作:
SHOW CREATE TABLE myTable;
同样,以下是更改表级编码的方法:
(CREATE | ALTER) TABLE ... DEFAULT CHARACTER SET utf8;
我建议在层次结构中将编码设置得尽可能高。这样,您不必记住为新表手动设置它。现在,如果您的表的字符编码尚未设置为 UTF-8,您可以尝试使用如下alter
语句对其进行转换:
ALTER TABLE ... CONVERT TO CHARACTER SET utf8;
使用此语句时要非常小心!如果您的表中已有 UTF-8 值,则在您尝试转换时它们可能会损坏。但是,有一些方法可以解决这个问题。
强制 MySQLi 使用 UTF-8
最后,在连接到数据库之前,请确保发出适当的调用来说明您正在使用 UTF-8 编码。就是这样:
$db = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
// Change the character set to UTF-8 (have to do it early)
if(! $db->set_charset("utf8"))
{
printf("Error loading character set utf8: %sn", $db->error);
}
一旦你这样做了,一切都应该按预期工作。您需要担心编码的唯一字符是 HTML 的 big 5: <, >, ', ", and &
。您可以使用htmlspecialchars()函数来处理它。
如果您想了解更多信息(并获取其他资源的链接),请随时查看我撰写的有关此过程的文章。有两个部分:Unicode 和 Web:第 1 部分,以及Unicode 和 Web:第 2 部分。祝你好运!