utf 8 - PHP和MySQLi UTF8

时间:2012-04-26 10:48:42

标签: php character-encoding mysqli

我的表字符集是utf8,它的校对是utf8.now我有这段代码:

   $mysqli = new mysqli("localhost", "root", "", "Amoozeshgah");

            if (mysqli_connect_errno()) {
                  printf("Connect failed: %s\n", mysqli_connect_error());

            }
          if (!$mysqli->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
    printf("Current character set: %s\n", $mysqli->character_set_name());
}
        mysql_set_charset('utf8');
            if ($stmt = $mysqli->prepare("SELECT About_Title FROM Tbl_About WHERE About_Id=?")) {
                $city = 8;

               /* bind parameters for markers */
                $stmt->bind_param("s", $city);

              /* execute query */
                $stmt->execute();

               /* bind result variables */

                  $result = $stmt->get_result();

             /* fetch value */
            while ($myrow = $result->fetch_assoc()) {

        // use your $myrow array as you would with any other fetch
        printf("%s is in district %s\n", $city, $myrow['About_Title']);
        print("shod");

    }

但是输出是:

Current character set: utf8 8 is in district نتمنتشس shod

我该怎么办? 编辑: 我换了:

if (!$mysqli->set_charset("utf8")) {
        printf("Error loading character set utf8: %s\n", $mysqli->error);
    } else {
        printf("Current character set: %s\n", $mysqli->character_set_name());
    }
            mysql_set_charset('utf8');

$mysqli->set_charset("utf8")

但没有区别。

6 个答案:

答案 0 :(得分:52)

请将mysql_set_charset('utf8');替换为$mysqli->set_charset("utf8"): - )

答案 1 :(得分:18)

or mysqli_set_charset($this->mysqli,"utf8");
mysqli_set_charset($conn,"utf8");

答案 2 :(得分:1)

以防万一,在代码中使用“ json_encode”,例如:

json_encode($rows);

只需将其更改为:

json_encode($rows,JSON_UNESCAPED_UNICODE);

答案 3 :(得分:0)

有趣的场景可能会帮助其他人。没有技术细节/解释,只是在正确的方向上推/线。

场景:基于成功/验证的IPN PayPal交易远程自动创建用户帐户。 Mysqli Query创建用户和usermeta数据,但该数据的值包含隐藏的格式字符,并使表单处理中调用的数据的使用无效。非常简单的解决方案,无需更改/更改任何现有的DB表。基本上这可以确保您的数据只是ASCII可打印字符,甚至使用$ mysqli-> set_charset(“utf8”);因为您正在准备处理和输入“ASCII clean”数据,所以并不是那么重要。

static int parse_line(char *line, const char *delim, char *field[])
 {
   char *next;
   int cnt = 0;
   char *saveptr;

   next = strtok_r(line, delim, &saveptr);
   while (next) {
       if (cnt == MAX_NUM_FIELDS - 1)
            break;
       field[cnt] = (char *) malloc(strlen(next) + 1);
       strcpy(field[cnt++], next);
       next = strtok_r(NULL, delim, &saveptr);
   }
   field[cnt] = (char *) 0; /* make the field array be    null-terminated */
   int i;
   for (i = 0; i < cnt; i++) {
       free(field[cnt]);
   }
   return cnt;
}

答案 4 :(得分:0)

从数据库中获取数据时,您不仅要正确获取数据,还需要在页面上正确显示数据,因此请尝试在页眉中使用UTF-8编码:

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

<meta charset="utf-8">

这是我的问题和解决方案,感谢Rohit Kumar Choudhary。

答案 5 :(得分:-1)

在您的php文件中,在代码顶部添加以下内容

header('Content-Type: text/plain; charset=utf-8');