За последние 24 часа нас посетили 20284 программиста и 1716 роботов. Сейчас ищут 1322 программиста ...

Проблема с отображением кириллической строки JSON в PHP

Тема в разделе "PHP и базы данных", создана пользователем FrankBY, 26 июн 2018.

  1. FrankBY

    FrankBY Новичок

    С нами с:
    26 июн 2018
    Сообщения:
    9
    Симпатии:
    0
    Суть проблемы такова:

    Из приложения DELPHI отправляется JSON запрос, содержащий кириллический текст.
    Почему-то при отображении содержания страницы скрипт преобразует строку "Пример" в "AFD0C8CCC5D0". Может есть какая-то функция по преобразованию в нормальные "русские буквы"?

    Помогите, плиз
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну в принципе да
    https://php.ru/manual/function.hex2bin.html
    но это костыль
    json должен парситься обратно как было сам через json_decode()


    а можно пример данных в том виде как они приходят?
     
  3. FrankBY

    FrankBY Новичок

    С нами с:
    26 июн 2018
    Сообщения:
    9
    Симпатии:
    0
    $pp = $_POST["q"];
    $data_wo = json_decode($pp, true);
    $fio = $data_wo["FIO"];

    Отправляю скрипту: { "action" : "testrussian", "FIO" : "Иван Иванов" }
    Возвращает: {"result":"OK","description":"A8C2C0CD A8C2C0CDCEC2"}
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты уверен, что оно прям вот так приходит?
    покажи var_dump($_POST["q"]);
     
  5. FrankBY

    FrankBY Новичок

    С нами с:
    26 июн 2018
    Сообщения:
    9
    Симпатии:
    0
    JSON отправляется из DELPHI - { "action" : "testrussian", "FIO" : "Иван Иванов" }
    var_dump($_POST["q"]) уже в виде

    string(61) "{ "action" : "testrussian", "FIO" : "A8C2C0CD A8C2C0CDCEC2" }"
    {"result":"OK","description":"A8C2C0CD A8C2C0CDCEC2"}
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну значит надо у дельфи спросить, почему оно так приходит
     
  7. FrankBY

    FrankBY Новичок

    С нами с:
    26 июн 2018
    Сообщения:
    9
    Симпатии:
    0
    Можно сказать уже неделю не могу решить... Потому и спросил, может можно преобразовать A8C2C0CD в Иван, а A8C2C0CDCEC2 - в Иванов, какой-то функцией...
    По идее Delphi должен отправлять всегда в UTF8 - там везде прописано UTF8 - вешаюсь уже...
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно, но каждое слово придётся выковыривать и преобразовывать отдельно

    почему дельфи так делает?
    то, что ты показал это строка с буквами. Она прям вот строка с этими буквами и пробелом между. Пхп правильно её показывает как строку с буквами, потому что она так уже и приходит.

    Дельфи чудит. Посмотри в исходниках от дельфи проекта.
     
  9. FrankBY

    FrankBY Новичок

    С нами с:
    26 июн 2018
    Сообщения:
    9
    Симпатии:
    0
    Даже не знаю как это показать...

    Var
    JS : String;
    .....

    JS := '{ "action" : "testrussian", "FIO" : "Иван Иванов" }';

    RESTRequest1.Params.ParameterByName('q').Value := JS;
    RESTRequest1.Execute;
    JSA := RESTResponse1.Content;

    Кстати ответ от PHP приходит нормально, если всё русскими буквами, то есть DELPHI корректно работает с кодировкой...
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    эм
    что за js?

    а, тупо json типа но кратко, ок. название переменной. я думал js.

    и че, что оно написано по-русски. после энкода превращается в тыкву. а кто виноват?
    --- Добавлено ---
    ну типа сюда пихаешь русские буквы

    тут делаешь запрос

    а приходит дерьмо

    вывод: дерьмо случается между присваиванием и отправкой запроса, но возможно внутри Execute
     
  11. FrankBY

    FrankBY Новичок

    С нами с:
    26 июн 2018
    Сообщения:
    9
    Симпатии:
    0
    Что DELPHI криво выдает - это понятно. Надеялся решить в PHP преобразованием...
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно накостылить
    но можно же заглянуть внутрь чуть глубже и выловить, где энкодит неверно и заменить на другое что-то
     
  13. FrankBY

    FrankBY Новичок

    С нами с:
    26 июн 2018
    Сообщения:
    9
    Симпатии:
    0
    За неделю решения не нашёл
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я ж написал сверху
    бьёшь по пробелу
    результаты все через hex2bin
    и обратно склеиваешь
     
  15. FrankBY

    FrankBY Новичок

    С нами с:
    26 июн 2018
    Сообщения:
    9
    Симпатии:
    0
    Придётся, видимо. Пробел заменить на "20" и можно в одну строку. Спасибо за совет.
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    кстати отличное решение, да
     
  17. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Не вижу
    var_dump(json_decode($_POST['q'], true));
    И json должен быть в urf-8
     
  18. FrankBY

    FrankBY Новичок

    С нами с:
    26 июн 2018
    Сообщения:
    9
    Симпатии:
    0
    Как это не смешно, но нашёл решение...

    JSON := TJSONObject.Create();
    JSON.AddPair(TJSONPair.Create('FIO', 'Иван Иванов'));

    RESTRequest1.Params.ParameterByName('q').Value := JSON.ToJSON;
    RESTRequest1.Execute;
    JSA := RESTResponse1.Content;

    Ошибка была в том, что нельзя передавать просто STRING.

    В итоге в PHP приходит в нормальном UTF8 формате.
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а, понятно. это не json был =)
    просто очень похожий.