我的表字符集是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")
但没有区别。
答案 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');