PHP - UTF8解码问题

时间:2016-02-26 13:56:17

标签: php mysql utf-8

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


}

1 个答案:

答案 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

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

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

  1. 使用第一个查询
  2. 在整个数据库中运行它
  3. 使用第二个查询
  4. 逐个表运行它
  5. 使用第三个查询检查是否已正确设置字符集
  6. 编辑2:请记住在html文件中设置标记<meta charset="UTF-8">

    我希望这可以帮助你:)