Показать лингвальный текст, хранящийся в varchar (utf8_unicode_ci) на сервере MySQL в приложении Android с помощью сценария JSON php

0

Я прошел много сообщений по одной теме, но до сих пор не могу понять, что является решением. Если вы считаете, что доступное решение будет работать для меня, вы также можете направить меня туда.

Теперь я хочу отображать текст на своем региональном языке (хинди) внутри моего приложения. Этот текст хранится в таблице на моей базе данных MySQL сервера веб-сайта. Я извлекаю эти данные вместе со многими столбцами через SQL-запрос, запускаемый через php-скрипт в форме JSON.

Когда я тестирую этот JSON на JSONLint, а также беру журнал json-строки, полученный в Async-задании внутри приложения, все поля, имеющие тип 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 не существует.

Изображение 174551

Ниже приведен сценарий 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"
}]
}

Как это исправить? Будем очень благодарны за помощь.

Теги:
phpmyadmin

2 ответа

1
Лучший ответ

добавить строку mysqli_set_charset( $con, 'utf8'); после mysqli_connect() как 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 как

Изображение 174551

0

У меня была аналогичная проблема с Arabic и Hindi я решил, как показано ниже. Вы можете решить эту проблему на стороне MySQL.

В структуре таблицы вам необходимо изменить сортировку utf8_bin

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню