PHP - UTF8 解码问题


PHP - UTF8 Decoding Issue

我在从 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

当然,您应该在进行任何这些更改之前进行备份,以防万一。

编辑:运行这些查询的正确顺序是:

  1. 使用第一个查询在整个数据库中运行它
  2. 使用第二个查询逐个表运行它
  3. 使用第三个查询检查字符集是否已正确设置

编辑 2 : 请记住在 html 文件中设置标签<meta charset="UTF-8">

我希望这对您有所帮助:)