我在从 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
}
您在这里的问题可能与数据库有关。您需要将数据库字符集设置为 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">
。
我希望这对您有所帮助:)