Я пытался решить эту проблему больше недели.
у меня есть MySQL база данных utf8_general_ci.
Когда я печатаю результат в JSON форматировать с помощью php, символы не UTF8 закодирован.
Значения хранятся в базе данных на арабском языке
Вот код, который я использую
db.php
<?php
$DBhost = "xx.xx.xx.x";
$DBusername = "username";
$DBpassword = "password";
$db_name = "bdname";
$connect = mysql_connect("$DBhost", "$DBusername", "$DBpassword")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
?>
и код для печати результатов
show.php
<?php
include('db.php');
$tbl_name = "table_name";
mysql_set_charset('utf8');
$sth = mysql_query("SELECT * FROM $tbl_name");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
$rows[] = array_map('utf8_encode', $r);
}
print json_encode($rows);
?>
Пример вывода:
[{«id»: «4», «news_id»: «1», «caption»: «\ u00c3 \ u00c3 \ u008e \ u00c3 \ u00c3 \ u0087 \ u0087 \ u00c3 \ u0091 \ u00c3 \ u0087 \ u00c3 \ u00a1 \ u00c3 \ u00c3 \ u00a3 \ u00c3 \ u00a1 \ u00c3 \ u0089 \ u00c3 \ u0087 \ u00c1 \ u00c3 \ u00a3 \ u00c3 \ u00c00 \ u003 u00c3 \ u00c3 \ u00c3 \ u00c3 \ u008e \ u00c3 \ u00c3 \ u00a3 \ u00c3 \ u00c3 \ u0089 \ u00c3 \ u00c3 \ u003 \ u003 u0087 \ u00c3 \ u00a1 \ u00c3 \ u009e \ u00c3 \ u008f \ u00c3 \ u00a3»
Что я понял из моих поисков, что / u00 это latin1 и UTF8 должен начинаться с / u0 не два 0.
Перепробовал разные методы конвертации latin1 в UTF8 лайк Iconv а также decode_json , изменяя mysql_set_charset в latin1 и даже удалив его, добавил заголовок HTML, используя UTF8, latin1 и windows-1526 кодировка также те же результаты, и когда-нибудь я получаю ноль результат для подпись выход.
У меня нет вариантов здесь, и я действительно не знаю, что делать
любая идея ?
Включите следующий заголовок в ваш файл .php
<?php
header('Content-type: application/json; charset=UTF-8');
...
и добавьте «JSON_UNESCAPED_UNICODE» в свой код json
echo json_encode($response, JSON_UNESCAPED_UNICODE);
Обязательно удалите ненужный utf8_encode ().
Когда вы используете mysql_set_charset('utf8');
ты получаешь utf-8
закодированные данные из базы данных MySQL. Не использоватьarray_map('utf8_encode', $r)
на этих данных — это твоя ошибка. Правильный один это:
while($r = mysql_fetch_assoc($sth)) {
$rows[] = $r;
}