2

我有这样的问题,先看看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。特殊字符是格鲁吉亚语:)

它的结果是英文字符很好,格鲁吉亚人带问号:(

无论如何它都不起作用:(

4

3 回答 3

7

PHP 文件是 UTF-8的事实并不一定意味着来自/去往数据库的数据也是 UTF-8。

你没有提到你正在使用哪个扩展,但是:

  • 对于mysql使用mysql_set_charset($link,'utf8');

  • 对于mysqli使用mysqli->set_charset('utf8')或与上面相同mysqli_

  • 对于PDO,连接时包含charset:utf8DSN字符串中。

于 2012-07-13T09:48:09.867 回答
3

声明 HTML utf8 编码:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

和/或在标头中传输编码:

header('Content-Type: text/html; charset=UTF-8');
于 2012-07-13T09:40:38.293 回答
1

尝试

htmlentities($row['name'],ENT_QUOTES);

htmlentities

于 2012-07-13T09:41:27.820 回答