使用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'字段类型。
下面是我的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_ci
到PostTitle
和PostBrief
像
我和Arabic
和Hindi
有类似的问题我解决如下。你可以在MySQL方面解决这个问题。
在表结构中,您必须更改排序规则utf8_bin
"PostID" - `utf8_bin` instead of `latin`,
"PostCategory" - `utf8_bin` and so on.
以上是关于使用JSON php脚本在Android应用程序的MySQL服务器中显示保存在varchar(utf8_unicode_ci)中的语言文本的主要内容,如果未能解决你的问题,请参考以下文章
通过 PHP 将 Sql 数据库转换为具有正确格式的 JSON,并在 PHP 脚本本身中对值进行排序