我在两个不同的页面上有两个表单,用于将数据插入MySQL数据库。我在表单数据中有一些特殊字符,如'čšžćđ',我通过表单传递给插入脚本。
来自第一个表单的数据被正确插入,而第二个表单中的某些字段包含'?'字符,表示编码不匹配。
两个表单的两个插入脚本使用相同的文件连接到数据库并设置编码,如下所示:
<?php
$username = "root";
$password = "";
$servername = "localhost";
$conn = mysqli_connect($servername, $username, $password);
mysqli_select_db($conn, "testdb");
if (!$conn) { // check if connected
die("Connection failed: " . mysqli_connect_error());
exit();
}else{
/* change character set to utf8 */
if (!mysqli_set_charset($conn, "utf8")) {
// printf("Error loading character set utf8: %s\n", mysqli_error($conn));
} else {
// printf("Current character set: %s\n", mysqli_character_set_name($conn));
}
mysqli_select_db($conn, "testdb");
//echo "Connected successfully.";
// Check if the correct db is selected
if ($result = mysqli_query($conn, "SELECT DATABASE()")) {
$row = mysqli_fetch_row($result);
//printf("\nDefault database is %s.\n", $row[0]);
mysqli_free_result($result);
}
}
?>
我想这意味着客户端字符编码设置不正确?所有数据库表都具有utf_8编码集。
答案 0 :(得分:1)
尝试在页面顶部设置编码
<?php
header('Content-Type: text/html; charset=utf-8');
other code...
答案 1 :(得分:1)
您在谈论HTML表单吗?如果是的话,
<form accept-charset="UTF-8">
每个重音字符是一个?
吗?当您尝试使用utf8 / utf8mb4时,如果您看到问号(常规问号,而不是黑色钻石),
CHARACTER SET utf8
(或utf8mb4)。解决这个问题。数据可能已转换为?
,因此无法从文本中恢复。
SELECT col, HEX(col) FROM ...
查看已存储的内容。
?
为3F
十六进制。čšžćđ
。