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

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

У меня есть база данных 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":"ÃÎÈÇÑ Ç áÈØæáÉ ÇáãÏÑÓà ­Ã‰ ÇáÎÇãÓÉ áßÑÉ ÇáÞÏã"

Из моего поиска я понял, что /u00 — это latin1, а UTF8 должен начинаться с /u0, а не два 0.

Пробовал разные методы преобразования latin1 в UTF8, такие как iconv и decode_json , изменяя mysql_set_charset в latin1 и даже удалив его, добавил заголовок html, используя кодировку UTF8,latin1 и windows-1526, также те же результаты, и иногда я получаю null результат для вывода caption.

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

Есть идеи ?


person aLFaRSi    schedule 01.10.2014    source источник
comment
протестировали ли вы функции mbstring, php.net/manual/en/ref.mbstring.php или хороший учебник ar-php.org/faq-php -arabic.html   -  person Jérôme Teisseire    schedule 01.10.2014
comment
Представляют ли эти escape-последовательности неправильные символы или вы просто хотите использовать другие escape-последовательности для представления символов, отличных от ASCII?   -  person Quentin    schedule 01.10.2014
comment
@Quentin, я хочу, чтобы результат был в utf8   -  person aLFaRSi    schedule 01.10.2014
comment
@JérômeTeisseire, сейчас попробую   -  person aLFaRSi    schedule 01.10.2014
comment
@JérômeTeisseire, какая ссылка на учебник не работает, и не понял, что делать по другой ссылке, не могли бы вы объяснить, как выполнить тест?   -  person aLFaRSi    schedule 01.10.2014
comment
@aLFaRSi — в настоящее время он находится в ASCII, который является подмножеством UTF-8, поэтому он находится в UTF-8.   -  person Quentin    schedule 01.10.2014
comment
@ Квентин, тогда почему я не вижу символов на арабском языке? как я могу исправить это, пожалуйста?   -  person aLFaRSi    schedule 01.10.2014
comment
stackoverflow.com/questions/23322312/   -  person Prashant Tapase    schedule 01.10.2014
comment
@Prashant тоже не работает   -  person aLFaRSi    schedule 01.10.2014


Ответы (2)


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

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

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

echo json_encode($response, JSON_UNESCAPED_UNICODE);

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

person oscarAguayo    schedule 10.09.2015

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

while($r = mysql_fetch_assoc($sth)) {
    $rows[] = $r;
}
person Rimas    schedule 01.10.2014