繁体   English   中英

使用PHP + MySQL的utf-8编码问题

[英]Issue with utf-8 encoding using PHP + MySQL

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

PHPHTML文件也设置为utf8

我不知道...

尝试查询

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

当您在网站上显示UTF8字符但告诉浏览器将其解释为Latin1(或Latin2)时,您会看到这种乱码: ß

当您在网站上显示Latin1(或Latin2)字符,但告诉浏览器将它们解释为UTF8时,您会看到问号。

所以我的猜测是你把所有内容都改为UTF8(我的意思是,你告诉数据库引擎,网络服务器以及你将使用UTF8的浏览器),但实际上并没有将字符串转换为UTF8。

做什么@Darkerstar说。 将转储转换为UTF8(Notepad ++可以轻松完成)并再次导入。

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

在连接到db之后的dbconfig集中:

mysql_query(“SET NAMES'utf8'”);

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)”。

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

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

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

BW:我使用Notepad ++进行转换。

它似乎不像在MySQL中将每个SQL数据库,表和字段设置为UTF-8并且足够好。 很烦人。

结束强制解决编码问题的问题:

不得不使用这个我打开数据库的地方:$ db-> set_charset(“utf8”);

这很有效。 最后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM