【问题标题】:Charset Utf8 not working with json encodeCharset Utf8 不适用于 json 编码
【发布时间】:2016-01-30 13:26:38
【问题描述】:

我有一个 php 文件可以返回 json,但给出的结果不正确。

例如:Lập Trình Ứng Dụng 在数据库中 => L?p Trình ?ng D?ng 在视图中

这是php文件

  <?php 
    $mysql = new mysqli('localhost','root','','freelancer');
    $result = $mysql->query("select * from tag");
    $rows = array();
    while($row = $result->fetch_array(MYSQL_ASSOC)) {
        $rows[] = array_map("utf8_encode", $row);
    }
    echo json_encode($rows);
    ?>

希望大家能帮帮我。感谢阅读

【问题讨论】:

  • 您的文件是否保存为“UTF-8 without BOM”?
  • 什么是BOM? Tag 表的排序规则是 utf8_unicode_ci。我使用该排序规则的每个表,但这只是我遇到 utf8 错误的表
  • 我说的是文件本身,它可以保存为不同的格式,你需要的是“UTF-8 without BOM”。在“编码”中使用记事本++进行检查。
  • @leonardo_palma 我正在使用子行文本 3。文件是 tag.php。所以你认为 array_map("utf8_encode", $row); 有什么问题吗?功能?。我正在使用此article 跟踪代码
  • @HoàngPhúcVũ 他的意思是,当您以崇高的文本打开控制台并输入view.encoding() 时,您看到'UTF-8''UTF-8 with BOM'。您的连接中的字符集也可能未设置为utf8。检查这篇文章是否有帮助stackoverflow.com/questions/279170/utf-8-all-the-way-through

标签: php json utf-8


【解决方案1】:

utf8_encode() 仅适用于 iso-8895-1 编码的字符串。由于您的字符串包含非拉丁字符,因此您的数据无法以 iso-8895-1 编码,因此utf8_encode() 肯定不起作用。

相反,您需要通过将set_charset("utf8") 添加到您的连接配置来让 MySQL 返回其已以 UTF-8 编码的数据。现在您有了 UTF-8 编码的字符串,您不再需要重新编码它。

您的新代码应如下所示:

<?php 
    $mysql = new mysqli('localhost','root','','freelancer');
    $mysql->set_charset("utf8")

    $result = $mysql->query("select * from tag");
    $rows = array();
    while($row = $result->fetch_array(MYSQL_ASSOC)) {
        $rows[] = $row;
    }
    echo json_encode($rows);
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 2021-03-17
    相关资源
    最近更新 更多