我正在尝试制作一个注册表单,人们将在其中获取链接并输入其信息,然后将其存储在数据库中。不幸的是,当我尝试使用表单输入阿拉伯语信息时,它会作为未知字符存储在数据库中。
我尝试了以下但没有成功。
在索引中设置默认字符集,如下所示:
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
在数据库处理程序页面中设置默认字符集:
$cfg['DefaultCharset'] = 'utf_8';
$cfg['DefaultConnectionCollation'] = 'utf8_general_ci';
将数据库归类更改为utf8_general_ci
将表格排名更改为utf8_general_ci
导出为sql并编辑charset但我发现它已经是UTF-8了。
确保我的浏览器unicode设置为UTF-8。
这就是它如何运作的一个例子:
<form action="signup.php" method="POST" class="form">
<input type="text" name="first"><br />
<input type="text" name="uid"><br />
<input type="date" name="dob"><br />
-
$first = $_POST['first'];
$uid = $_POST['uid'];
$dob = $_POST['dob'];
$sql = "INSERT INTO students (first, uid, dob)
VALUES ('$first','$uid', '$dob')";
$result = mysqli_query($conn, $sql);
并且它们通过所需文件连接以连接到数据库。
$cfg['DefaultCharset'] = 'utf_8';
$cfg['DefaultConnectionCollation'] = 'utf8_general_ci';
$conn = mysqli_connect("localhost", "root", "", "test2");
if (!$conn ) {
die("Connection failed: ". mysqli_connect_error());
}
不知道造成这种情况的原因是什么,我需要快速修复。
答案 0 :(得分:0)
我有两个可能的建议:
通过set_charset()将您的mysqli连接设置为utf-8,如果失败,您可以使用mb_convert_encoding
例如,
if (!mysqli_set_charset($conn, "utf8")) {
printf("Error loading character set utf8: %s\n", mysqli_error($conn));
exit();
} else {
printf("Current character set: %s\n", mysqli_character_set_name($conn));
}
如果失败了,或者你想同时使用两者,你也可以这样做:
$first = mb_convert_encoding($first, "UTF-8");
// and so forth
答案 1 :(得分:0)
我怀疑您遇到的问题与字符集有关,但每列有关。如果您在更改字符集之前创建了表格和数据库,那么可能并非所有字符集都已更改。
通过查看类似于以下内容的SHOW CREATE TABLE <tablename>
输出来验证我的怀疑:
mysql> show create table arabic;
+--------+---------------------------------------------------------------+
| Table | Create Table |
+--------+---------------------------------------------------------------+
| arabic | CREATE TABLE `arabic` (
`words` varchar(60) CHARACTER SET latin1 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+---------------------------------------------------------------+
请注意,列words
仍然具有字符集latin1
。可以像这样修改单个列:
mysql> ALTER TABLE arabic CHANGE words words VARCHAR(60) CHARACTER SET utf8;
Query OK, 0 rows affected (1.16 sec)
Records: 0 Duplicates: 0 Warnings: 0
此处的其他帖子也可能有所帮助[{3}}
示例:
mysql> ALTER TABLE arabic CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 0 rows affected (0.88 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE arabic;
+--------+---------------------------------------------------------------+
| Table | Create Table |
+--------+---------------------------------------------------------------+
| arabic | CREATE TABLE `arabic` (
`words` varchar(60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+---------------------------------------------------------------+
1 row in set (0.00 sec)