【问题标题】:PHP - UTF8 Decoding Issue [duplicate]PHP - UTF8 解码问题 [重复]
【发布时间】:2016-02-26 13:56:17
【问题描述】:

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


}

【问题讨论】:

标签: php mysql utf-8


【解决方案1】:

您的问题可能与数据库有关。 您需要将数据库字符集设置为 UTF-8 才能正确查询,您要做的是获取一个字符串并使用

设置 Client 端默认字符集
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文件中设置标签&lt;meta charset="UTF-8"&gt;

希望对你有帮助:)

【讨论】:

  • 谢谢。我试图将 Collocation 更改为 'utf8_unicode_ci' 但仍然有同样的问题
  • @SNos 那是因为您需要先在数据库中更改它,然后在每个表中更改它。我会编辑答案
  • 我按照你的建议改了,还是看不到表情。在数据库中,它们的存储方式如下:â¤ï,而不是由 php 转换
  • @SNos 好的,我们越来越近了,检查新的更新
  • 现在我得到 ? 而不是 áâ¤ï 仍然没有转换
猜你喜欢
  • 2013-06-17
  • 2012-12-13
  • 2011-06-14
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 2018-07-01
  • 2018-12-04
相关资源
最近更新 更多