19

我将数据从 MySQL 4(它们最初设置为latin2编码)移动到 MySQL 5,并将编码设置为 UTF-8。在phpMyAdmin中看起来不错,UTF-8 也可以。但是,网站上有问号而不是一些字符!网站编码也设置为UTF-8,所以我不明白问题出在哪里。

PHP 和 HTML 文件也设置为 UTF-8。

我怎样才能解决这个问题?

4

10 回答 10

31

试试查询

SET NAMES utf8

在您的应用程序中的任何查询之前。

于 2009-11-10T13:01:15.817 回答
24

在我的服务器上,将这些添加到我的 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对我来说是一样的。

于 2012-01-05T20:08:24.857 回答
13

尝试将 MySQL 连接设置为 UTF-8:

SET NAMES 'utf8'

并发送明确的 UTF-8 标头,以防您的服务器有一些其他默认设置:

header('Content-type: text/html; charset=utf-8');
于 2009-11-10T13:03:37.427 回答
3

您不必将 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 到浏览器输出。这是浏览器解释它的方式。

于 2009-11-10T13:01:47.093 回答
2

这是一个修复。将标题设置为header ('Content-type: text/html; charset=utf-8');然后使用 打印您的内容utf8_decode($content)。您必须拥有这两个才能使其正常工作。

于 2011-10-25T03:51:05.580 回答
2
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)”。

于 2014-03-14T20:52:05.457 回答
2

当您在网站上显示 UTF-8 字符,但告诉浏览器将它们解释为Latin-1(或Latin-2)时,您会看到这种乱码:ß

当您在网站上显示 Latin-1(或 Latin-2)字符,但告诉浏览器将它们解释为 UTF-8 时,您会看到问号。

所以我的猜测是您将所有内容都切换为 UTF-8(我的意思是,您告诉数据库引擎、Web 服务器和浏览器您将使用 UTF-8),但您实际上并没有将字符串转换为 UTF-8 .

照暗星说的去做。将您的转储转换为 UTF-8(Notepad++可以轻松做到这一点)并再次导入。

于 2013-01-08T14:49:00.460 回答
2

在您的网站根目录中 放置一个.htaccess 文件,其内容为: AddDefaultCharset UTF-8

在连接到数据库后的 dbconfig 集中:

mysql_query("SET NAMES 'utf8'");
于 2009-12-05T12:29:45.740 回答
1

我最近遇到了这个问题(我希望这和你遇到的问题一样),我尝试了很多方法,但最终奏效的方法非常简单。

将转储的 SQL 文件转换为 UTF-8 格式,然后将其导入。

顺便说一句:我使用Notepad++进行转换。

于 2009-11-10T14:49:20.723 回答
1

在 MySQL 中将每个 SQL databasetablefield设置为 UTF-8似乎并不足够好。很烦人。

我最终强迫问题解决编码问题:

我必须在打开数据库的每个地方都使用它:

$db->set_charset("utf8");

这奏效了。最后。

于 2015-07-07T21:58:37.110 回答