首页 > 解决方案 > 如何放入 JSON Object 非英文字母?

问题描述

我是安卓开发者。我通过 PHP 代码从 MySQL 数据库中获取数据:

<?php

    $con = mysqli_connect("..........", "...........", "........", "......");

  $query = mysqli_query($con,
           "SELECT * FROM news WHERE status = 'actual' ORDER BY id DESC");
$someArray = [];
$someArray;

  // Loop through query and push results into $someArray;
  while ($row = mysqli_fetch_assoc($query)) {
    array_push($someArray, [
        'id' => $row['id'],
'title' => $row['title'],
'text' => $row['text'],
'date' =>$row['date']
 ]);
  }

  $someJSON = json_encode($someArray);

echo  $someJSON;
?>

它适用于带有英文字母的数据,但是当我尝试在我的数据库中添加俄语字母或诸如“əçışüööğ等”之类的字母时。- 它不工作。我研究并发现我必须添加这个:

<meta charset="utf-8"/>

在 PHP 代码的顶部,但它仍然无法正常工作,然后我进行了更多研究,发现我应该更正 $someJSON ,并使其看起来像这样:

  $someJSON = json_encode($someArray, JSON_UNESCAPED_UNICODE);

它仍然无法正常工作

带有俄文字母的部分如下所示:

{"id":"4","title":"????????","text":"????????? ??????? ?????, ? ??? ????????? ?? ?????????","date":"21.08.18"}

在我的“标题”数据库中,它是:utf8mb4_unicode_520_ci,对于“文本”它是:utf8_unicode_520_ci
(我不知道有什么区别,只是在其中一个有效的情况下让它有所不同)

如何使用 JSON 对象显示俄语字母(和其他非英语)?

标签: phpandroidmysqljsonutf-8

解决方案


$someJSON = json_encode($someArray, JSON_UNESCAPED_UNICODE);

很好。问题在别处。请参阅此处的“问号”

最可能的原因/修复:

数据库表中的列不是CHARACTER SET utf8(或utf8mb4)。解决这个问题。(用 验证SHOW CREATE TABLE。)

注意:JSON 确实有问号;无法从中恢复数据。您必须返回并重建 JSON。


推荐阅读