Суть проблемы такова: Из приложения DELPHI отправляется JSON запрос, содержащий кириллический текст. Почему-то при отображении содержания страницы скрипт преобразует строку "Пример" в "AFD0C8CCC5D0". Может есть какая-то функция по преобразованию в нормальные "русские буквы"? Помогите, плиз
ну в принципе да https://php.ru/manual/function.hex2bin.html но это костыль json должен парситься обратно как было сам через json_decode() а можно пример данных в том виде как они приходят?
$pp = $_POST["q"]; $data_wo = json_decode($pp, true); $fio = $data_wo["FIO"]; Отправляю скрипту: { "action" : "testrussian", "FIO" : "Иван Иванов" } Возвращает: {"result":"OK","description":"A8C2C0CD A8C2C0CDCEC2"}
JSON отправляется из DELPHI - { "action" : "testrussian", "FIO" : "Иван Иванов" } var_dump($_POST["q"]) уже в виде string(61) "{ "action" : "testrussian", "FIO" : "A8C2C0CD A8C2C0CDCEC2" }" {"result":"OK","description":"A8C2C0CD A8C2C0CDCEC2"}
Можно сказать уже неделю не могу решить... Потому и спросил, может можно преобразовать A8C2C0CD в Иван, а A8C2C0CDCEC2 - в Иванов, какой-то функцией... По идее Delphi должен отправлять всегда в UTF8 - там везде прописано UTF8 - вешаюсь уже...
можно, но каждое слово придётся выковыривать и преобразовывать отдельно почему дельфи так делает? то, что ты показал это строка с буквами. Она прям вот строка с этими буквами и пробелом между. Пхп правильно её показывает как строку с буквами, потому что она так уже и приходит. Дельфи чудит. Посмотри в исходниках от дельфи проекта.
Даже не знаю как это показать... Var JS : String; ..... JS := '{ "action" : "testrussian", "FIO" : "Иван Иванов" }'; RESTRequest1.Params.ParameterByName('q').Value := JS; RESTRequest1.Execute; JSA := RESTResponse1.Content; Кстати ответ от PHP приходит нормально, если всё русскими буквами, то есть DELPHI корректно работает с кодировкой...
эм что за js? а, тупо json типа но кратко, ок. название переменной. я думал js. и че, что оно написано по-русски. после энкода превращается в тыкву. а кто виноват? --- Добавлено --- ну типа сюда пихаешь русские буквы тут делаешь запрос а приходит дерьмо вывод: дерьмо случается между присваиванием и отправкой запроса, но возможно внутри Execute
можно накостылить но можно же заглянуть внутрь чуть глубже и выловить, где энкодит неверно и заменить на другое что-то
Как это не смешно, но нашёл решение... JSON := TJSONObject.Create(); JSON.AddPair(TJSONPair.Create('FIO', 'Иван Иванов')); RESTRequest1.Params.ParameterByName('q').Value := JSON.ToJSON; RESTRequest1.Execute; JSA := RESTResponse1.Content; Ошибка была в том, что нельзя передавать просто STRING. В итоге в PHP приходит в нормальном UTF8 формате.