【发布时间】:2012-07-13 09:37:16
【问题描述】:
我也有这样的问题,先看看mysql表=>
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)时,它仍然显示问号(?????),为什么?我该如何解决?
更新
我做得不好的事情。所以我有 2 个 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 表中插入 this=>
insert into ok(name) values("one"),("ერთი"),("two"),("ორი");
PS。特殊字符是格鲁吉亚语:)
它的结果是英文字符很好,格鲁吉亚人带问号:(
无论如何它都不起作用:(
【问题讨论】:
-
你是如何检索它的,你是如何“编码为 utf8”的?
-
我正在用 php 脚本检索它,也想发布这个脚本吗? .php 文件编码也是 utf8,当我输入外文字母时,它会保存并显示,但是当我尝试从数据库中检索时,它会显示问号
-
你:SET CHARACTER SET utf8 SET NAMES utf8 ini_set("default_charset", "UTF-8");
-
否,在 php.ini 中默认为:latin1
-
看看 Nadav S. 和 Mihai Stancu 的答案