[英]Issue with utf-8 encoding using PHP + MySQL
我将数据从MySQL 4 (它们最初设置为latin2 encoding
)移动到MySQL 5并将编码设置为utf-8
。 它在phpMyAdmin
看起来不错,而utf-8
也没关系。 但是网站上有问号而不是一些字符! 网站编码也设置为utf8
所以我不明白问题出在哪里。
PHP和HTML文件也设置为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.