@notmad

Проблемы с кодировкой. Почему php возвращает русские буквы в виде u041f?

После запроса в mysql возвращает ассоциативный массив, в mysql базе сравнение стоит utf8_unicode_ci после json_encode() получаю такой массив : [{"reportId":"1","title":"?????? ?????"}] , так как вместо кирилии знаки вопроса сразу понятно что проблема в кодировке, добавляю этот код после подключения к базе:
$con->query("SET NAMES 'utf8'"); 
$con->query("SET CHARACTER SET utf8");  
$con->query("SET SESSION collation_connection = 'utf8_unicode_ci'");

и теперь php страница возвращает это:
[{"reportId":"1","title":"\u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0447\u0435\u0442"}]
Вариантов как это исправить не нашел, буду благодарен любой помощи.
  • Вопрос задан
  • 1211 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега PHP
Берём Вашу строку и обрабатываем
print_r(json_decode('[{"reportId":"1","title":"\u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0447\u0435\u0442"}]', true))

На выходе получаем
Array
(
    [0] => Array
        (
            [reportId] => 1
            [title] => Первый отчет
        )

)

Или
print_r(json_decode('{"reportId":"1","title":"\u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0447\u0435\u0442"}', true))

И на выходе обычный массв
Array
(
    [reportId] => 1
    [title] => Первый отчет
)

Что Вы хотите исправлять в данном случае?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
FanatPHP
@FanatPHP
Чебуратор тега РНР
1. Зачем это исправлять?
2. Если призвать на помощь логику, то можно догадаться , что подобный вывод возвращает не "пхп страница" а определенная функция. И если открыть раз в жизни описание этой функции в мануале, то и искать решение не пришлось бы, поскольку оно там написано русским по белому
Ответ написан
profesor08
@profesor08 Куратор тега PHP
Что-то переводит русские буквы в такой вид. Найди что это за кусок кода и исправь. Возможно текст в таком виде у тебя в бд. Тогда найди функцию, которая пишет в бд и исправь ее. Если думать и решать проблему не хочется, то страдай от последствий.

function replace_unicode_escape_sequence($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}

function unicode_decode($str) {
    return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $str);
}

echo unicode_decode("\u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0447\u0435\u0442");
Ответ написан
@synapse_people
[{"reportId":"1","title":"\u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0447\u0435\u0442"}] только это должен быть правильный ответ
Ответ написан
и теперь php страница возвращает это:
[{"reportId":"1","title":"\u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0447\u0435\u0442"}]


Если использовать json_encode($report, JSON_UNESCAPED_UNICODE), то на выходе будет читаемый тест.

Правильность результата можно проверить, просто выведя значение поля:
echo $report['title'];
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
25 апр. 2024, в 15:31
70000 руб./за проект
25 апр. 2024, в 15:26
15000 руб./за проект
25 апр. 2024, в 15:13
3000 руб./за проект