mysql — кодирование в UTF8 для результата JSON с использованием переполнения стека

Я пытался решить эту проблему больше недели.

у меня есть 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 кодировка также те же результаты, и когда-нибудь я получаю ноль результат для подпись выход.

У меня нет вариантов здесь, и я действительно не знаю, что делать

любая идея ?

1

Решение

Включите следующий заголовок в ваш файл .php

<?php
header('Content-type: application/json; charset=UTF-8');
...

и добавьте «JSON_UNESCAPED_UNICODE» в свой код json

echo json_encode($response, JSON_UNESCAPED_UNICODE);

Обязательно удалите ненужный utf8_encode ().

2

Другие решения

Когда вы используете mysql_set_charset('utf8'); ты получаешь utf-8 закодированные данные из базы данных MySQL. Не использоватьarray_map('utf8_encode', $r) на этих данных — это твоя ошибка. Правильный один это:

while($r = mysql_fetch_assoc($sth)) {
$rows[] = $r;
}
0

По вопросам рекламы [email protected]