我在从我的sql中解码脚本中的UTF8
字符时遇到了问题。
假设我有两个字符来自mysql
:
'á'& ❤️
我的脚本á
被解码正常但是,表情符号在â¤ï
中被解码
我做错了什么?
$conn = new mysqli($servername, $username, $password, $dbname);
$sql="SELECT * FROM `community` ORDER BY `community`.`date` DESC LIMIT 25";
mysqli_set_charset($conn, "utf8"); //UTF8
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
$comment = $row['comment'];
echo $comment . "</br>";
//echo htmlentities($comment); not working... white screen
}
更新
我更改了数据库和表格
$conn = new mysqli($servername, $username, $password, $dbname);
$sql="SELECT * FROM `community` ORDER BY `community`.`date` DESC LIMIT 25";
mysqli_set_charset($conn, "utf8"); //UTF8
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
$comment = $row['comment'];
$comment = mb_convert_encoding($comment, "UTF-8");
echo $comment . "</br>";
//echo htmlentities($comment); not working... white screen
}
答案 0 :(得分:0)
您的问题可能在于数据库。 您需要将数据库字符集设置为UTF-8才能正确查询,您正在做的是获取字符串并使用
设置客户端端默认字符集mysqli_set_charset($conn, "utf8"); //UTF8
这还不够,所以我建议你运行像
这样的SQL查询ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
为了更新它。如果您需要更改单个表,请使用
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
最后,您可以使用
进行检查SELECT DEFAULT_COLLATION_NAME FROM data_dictionary.SCHEMAS WHERE SCHEMA_NAME = 'databasename' LIMIT 1;
作为额外约会,以及在PHP中的情况下,您可以使用
转换字符串的编码$comment = mb_convert_encoding($comment, "UTF-8"); //Change encoding
echo mb_detect_encoding($str, "auto"); // Check encoding
当然,在进行任何这些更改之前,您应该进行备份,以防万一。
编辑:运行这些查询的正确顺序是:
编辑2:请记住在html文件中设置标记<meta charset="UTF-8">
。
我希望这可以帮助你:)