我有这样一个问题,首先看一下mysql table=>
CREATE TABLE IF NOT EXISTS users(
id int(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(40) CHARSET utf8 COLLATE 'utf8_unicode_ci' NOT NULL,
surname VARCHAR(40) CHARSET utf8 COLLATE 'utf8_unicode_ci' NOT NULL,
);
它成功地存储了数据,但当我试图将这些信息检索到我的.php文件(编码也是utf8)时,它仍然会给我打问号(??),为什么?我该如何解决?
更新
有些事情我做得不好。所以我有两个php文件,一个是classA.php文件,我在其中定义了从数据库中检索信息的类,并且我将这个文件(classA.php)包含在我想要查看数据的default.php文件中。我有和上面写的完全相同的表格,我正在写
header('Content-Type: text/html; charset=UTF-8');
在default.php的第一行,但它仍然不起作用,感谢您的建议:)
第二次更新
这个脚本我在classA.php文件中,它的编码是默认的,就像default.php文件编码一样。我刚刚在这个的第一行添加了default.php文件
header("Content-Type: text/html; charset=UTF-8");
但它仍然不起作用。
第三次更新
sql=>
create table ok(
id int(2) not null auto_increment primary key,
name varchar(20) charset utf8 not null);
和php文件
<?php
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<title>hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
$con = mysqli_connect("host","user","pass","db");
if (mysqli_connect_errno()==0){
if ($r = mysqli_query($con,"SELECT * FROM ok")){
mysqli_set_charset($con,"utf8");
while ($d = mysqli_fetch_assoc($r)){
echo $d['name'] . "<br>";
}
}
}
if (isset($con)){
mysqli_close($con);
}
?>
</body>
</html>
我已经在ok表中插入了这个=>
insert into ok(name) values("one"),("ერთი"),("two"),("ორი");
PS。特殊字符为格鲁吉亚语:)
它的结果是英语字符很好,格鲁吉亚人有问号:(
它无论如何都不起作用:(
事实上PHP文件是UTF-8的并不一定意味着来自/去往数据库的数据也是UTF-8的。
你没有提到你正在使用哪个扩展,但是:
-
对于mysql使用
mysql_set_charset($link,'utf8');
-
对于mysqli,使用
mysqli->set_charset('utf8')
或与mysqli_
相同的方法 -
对于PDO,连接时将
charset:utf8
包含在DSN字符串中。
声明HTML utf8编码:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
和/或标头中的传输编码:
header('Content-Type: text/html; charset=UTF-8');
尝试
htmlentities($row['name'],ENT_QUOTES);
请参阅htmlentities