使用JSON php脚本在Android应用程序的MySQL服务器中显示保存在varchar(utf8_unicode_ci)中的语言文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JSON php脚本在Android应用程序的MySQL服务器中显示保存在varchar(utf8_unicode_ci)中的语言文本相关的知识,希望对你有一定的参考价值。

我在同一主题上经历了很多帖子,但仍然无法弄清楚解决方案是什么。如果您认为可用的解决方案对我有用,那么您也可以指导我。

现在,我想在我的应用程序内以区域语言(印地语)显示文本。此文本存储在我的网站服务器mysql数据库的表中。我正在通过以JSON形式运行的php脚本的SQL查询检索此数据以及更多列。

当我在JSONLint上测试这个JSON时,并且通过记录应用程序内的Async任务接收的json字符串,所有具有Varchar类型和'utf8_unicode_ci'校对的字段显示如下,带有问号。其他字段类型正确。

"?????? ??? ???? ?? ??????? ?? ????? ???? ?? 10 ?????"

服务器细节

phpMyAdmin Version 4.7.3

PHP version: 5.6.30

Database 
Server type: MySQL
Server version: 5.6.38 - MySQL Community Server (GPL)
Protocol version: 10
Server charset: UTF-8 Unicode (utf8)

下面是我在数据库中的表。 utf8在图像中的区别是因为我正在尝试utf8mb4的工作原理。数据库是MyISAM类型,因此没有'nvarchar'字段类型。

enter image description here

下面是我的PHP脚本。我有两个表,表1包含非本地化字段,表2包含本地化翻译字段。 'hi'是我的语言代码。上表图像属于TableTranslation。

<?php

$host='localhost';
$hostname='*******';
$password='*******';
$db='*******';

$sql="SELECT TablePost.PostID,TableTranslation.PostCategory,TablePost.PostImage,TableTranslation.PostTitle,TableTranslation.PostBrief,
TableTranslation.PostLink,TablePost.IsShort,TablePost.IsSeenBy 

FROM TablePost LEFT JOIN TableTranslation ON TablePost.PostID = TableTranslation.PostID 
WHERE TableTranslation.Language LIKE 'hi';";

$con=mysqli_connect($host,$hostname,$password,$db);

$result = mysqli_query($con,$sql);

$response = array();

while($row=mysqli_fetch_array($result)){
array_push($response, array(
    "PostID" => $row[0],
    "PostCategory" => $row[1],
    "PostImage" => $row[2],
    "PostTitle" => $row[3],
    "PostBrief" => $row[4],
    "PostLink" => $row[5],
    "IsShort" => $row[6],
    "IsSeenBy" => $row[7]));
}

echo json_encode(array("server_response"=>$response));

mysqli_close($con);

?>

以下是我得到的JSON响应。

{
"server_response": [{
    "PostID": "1",
    "PostCategory": "??????????",
    "PostImage": "http://websitename.com/image.png",
    "PostTitle": "?????? ??? ???? ?? ??????? ?? ????? ???? ?? 10 ?????",
    "PostBrief": "???? ?? ????????? ?? ???-??? ?????? ?? ??? ???????? ???? ???? ?? ?? ??? ????? ??? ??? ?????? ????? ???? ???? ??? ?? ?? ???? ?? ??????? ?? ????? ???? ?? ??? ???????? ????? ???? ????",
    "PostLink": "http://websitename.com/post_link/",
    "IsShort": "0",
    "IsSeenBy": "98"
}]
}

我该如何纠正?非常感谢这里的任何帮助。

答案

mysqli_set_charset( $con, 'utf8');之后添加行mysqli_connect(),如下面的代码

    <?php

$host='localhost';
$hostname='*******';
$password='*******';
$db='*******';

$sql="SELECT TablePost.PostID,TableTranslation.PostCategory,TablePost.PostImage,TableTranslation.PostTitle,TableTranslation.PostBrief,
TableTranslation.PostLink,TablePost.IsShort,TablePost.IsSeenBy 

FROM TablePost LEFT JOIN TableTranslation ON TablePost.PostID = TableTranslation.PostID 
WHERE TableTranslation.Language LIKE 'hi';";

$con=mysqli_connect($host,$hostname,$password,$db);

mysqli_set_charset( $con, 'utf8');  //change here.

$result = mysqli_query($con,$sql);

$response = array();

while($row=mysqli_fetch_array($result)){
array_push($response, array(
    "PostID" => $row[0],
    "PostCategory" => $row[1],
    "PostImage" => $row[2],
    "PostTitle" => $row[3],
    "PostBrief" => $row[4],
    "PostLink" => $row[5],
    "IsShort" => $row[6],
    "IsSeenBy" => $row[7]));
}

echo json_encode(array("server_response"=>$response));

mysqli_close($con);

?>

也试着添加整理utf8_general_ciPostTitlePostBrief

enter image description here

另一答案

我和ArabicHindi有类似的问题我解决如下。你可以在MySQL方面解决这个问题。

在表结构中,您必须更改排序规则utf8_bin

"PostID" - `utf8_bin`   instead of `latin`,
"PostCategory" - `utf8_bin`  and so on.

以上是关于使用JSON php脚本在Android应用程序的MySQL服务器中显示保存在varchar(utf8_unicode_ci)中的语言文本的主要内容,如果未能解决你的问题,请参考以下文章

PHP从Android将JSON数据插入MySQL数据库

Android 应用的 JSON 编码数据

在PHP中传播变量

通过 PHP 将 Sql 数据库转换为具有正确格式的 JSON,并在 PHP 脚本本身中对值进行排序

如何在 IOS 上使用 Swift 解析 JSON,从 PHP 服务脚本发送?

Android如何连接MySQL数据库