我将数据从 MySQL 4(它们最初设置为
latin2
编码)移动到 MySQL 5,并将编码设置为 UTF-8。在phpMyAdmin里看起来不错,UTF-8也可以。但是,网站上有问号而不是一些字符!网站编码也设置为UTF-8,所以我不明白问题出在哪里。
PHP 和 HTML 文件也设置为 UTF-8。
我该如何解决这个问题?
尝试查询
SET NAMES utf8
在您的应用程序中进行任何查询之前。
在我的服务器上,将这些添加到我的 PHP 文件没有效果:
ini_set('default_charset', 'utf-8');
mysql_set_charset('utf8');
header('Content-type: text/html; charset=utf-8');
但是一旦我将它添加到我的 PHP 文件的顶部,一切都完美无缺:
$mysqli->query("SET NAMES 'utf8'");
注意:我在我的数据库中使用编码
utf8_general_ci
,但是utf8_unicode_ci
对我来说是一样的。
尝试将 MySQL 连接设置为 UTF-8:
SET NAMES 'utf8'
并发送明确的 UTF-8 标头,以防万一您的服务器有一些其他默认设置:
header('Content-type: text/html; charset=utf-8');
您不必将 PHP 和 HTML 文件设置为 utf-8。
只需将输出编码设置为 UTF-8,浏览器就会正确显示。
在 HTML 中:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
在 PHP 中:
header('Content-Type: text/html; charset=UTF-8');
当你从 MySQL 表中得到一个 UTF-8 的字符串时,除非你转换编码,否则它将一直是 UTF-8 到浏览器输出。这是浏览器解释它的方式。
当您在网站上显示 UTF-8 字符,但告诉浏览器将它们解释为 Latin-1(或 Latin-2)时,您会看到这种乱码:
ß
当您在网站上显示 Latin-1(或 Latin-2)字符,但告诉浏览器将它们解释为 UTF-8 时,您会看到问号。
所以我的猜测是您将所有内容都切换为 UTF-8(我的意思是,您告诉数据库引擎、Web 服务器和浏览器您将使用 UTF-8),但您实际上并没有将字符串转换为 UTF- 8.
按照 Darkerstar 所说的做。将您的转储转换为 UTF-8(Notepad++ 可以轻松做到这一点)并再次导入它。
mysql_query("SET NAMES UTF8");
在我的“connection.php”末尾添加这一行解决了我的问题。
我的连接文件的完整代码是:
<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_test = "localhost";
$database_test = "test";
$username_test = "username";
$password_test = "password";
$test = mysql_pconnect($hostname_test, $username_test, $password_test) or trigger_error(mysql_error(), E_USER_ERROR);
mysql_query("SET NAMES UTF8");
?>
我的数据库排序规则是“utf8_general_ci”。
页面是“dreamweaver default utf8”和“unicode normalization form=C (Canonical Decomposition)”。
我最近遇到了这个问题(我希望这和你遇到的是同一个问题),我尝试了很多方法,但最后起作用的很简单。
将转储的 SQL 文件转换为 UTF-8 格式,然后导入它。
顺便说一句:我使用 Notepad++ 进行转换。
在您的网站根目录中放置一个 .htaccess 文件,内容如下: AddDefaultCharset UTF-8
和
在连接到数据库后设置的 dbconfig 中:
mysql_query("SET NAMES 'utf8'");
在 MySQL 中将每个 SQL database、table 和 field 设置为 UTF-8 似乎并不足够好。很烦人。
我最终强迫问题解决编码问题:
我必须在我打开数据库的每个地方使用这个:
$db->set_charset("utf8");
这奏效了。最后。
这是一个修复。将标题设置为
header ('Content-type: text/html; charset=utf-8');
然后使用 utf8_decode($content)
打印您的内容。你必须有两个才能让它发挥作用。
放:
$conn->query("SET NAMES 'utf8'");
$conn 是我的 Mysqli 连接 在我的配置文件中帮助。