Помогите перекодировать json в utf8 — php mysql json

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Вопрос:


Проблема следующая. Есть подрядчик, который шлет на наш сервер к скрипту json запрос. Пример запроса следующий:

{"internal_id":"2", "name" :"Партнер", "logo" :"тестовые данные"}

Шлет его подрядчик через какую то прикладную программу на windows 7, Уверяет что json запрос в utf-8. Во время пересылки вручную прописывает все хедеры с utf-8

Я принимаю запрос с помощью php

Вот скрипт:

include $_SERVER['DOCUMENT_ROOT']."/api/config.php";
header('Content-type: text/html; charset=utf-8');

$data = file_get_contents('php://input');

$result = mysql_query("INSERT INTO test3 (id, rek) VALUES ('', '$data')");

В результате, в бд я получаю

{"internal_id":"2", "name" :"???????", "logo" :"????????"}

То есть, кирилица в бд не записывается.
В моей БД таблица типа MyISAM, поле rek имеет кодировку utf8_general_ci

Вот что я пробовал:

  1. Я попросил сгенерировать json файл с этой программы, и затем я попытался открыть у себя в саблайме. При открытии у меня редактор не распознает кирилицу, виджу кряки. Я вручную через саблайм пробовал переоткрыть файл и он открывается корректно в  windows-1251.

В результате этого теста я понимаю что его запрос приходит в windows-1251 на наш сервер, и игнорирует все его хедеры видимо и не кодируется на его стороне в утф8.

Я пробую с помощью php перекодировать вручную и сохранить:

$data = file_get_contents('php://input');
$test1 = mb_convert_encoding($data, "utf-8", "cp1251");
$text2 = iconv('cp1251', 'UTF-8', $data);

$result = mysql_query("INSERT INTO test3 (id, rek) VALUES ('', 'test1')");

В результате у меня даже с принудительной перекодировкой на моей стороне кирилица в БД не отображается, а показывается либо ???? либо другие кряки. Я пробовал две выше представленные функции, результата положительно нет.

Затем я попробвал в бд создать таблицу test3 но уже с cp1251_general_ci

Результат положительный. Все в бд сохраняется корректно.

Вопрос, как мне все таки перекодировать json, что еще можно попробовать, так как мне надо БД сохранить в utf8 что бы не иметь потом проблем.

Автор вопроса: WhoIsDT

terantul

Попробуйте использовать mb_detect_encoding для выяснения в какой кодировке приходят данные.

$convert_data = mb_convert_encoding($json, 'utf8', mb_detect_encoding($json));

И как я понимаю у Вас соединение с БД осуществляется через устаревший драйвер mysql.
Установливается ли при коннекте к БД кодировка соединения?

mysql_query("SET NAMES utf8", $link); 

Я так понял, вы кодируете json на стороне клиента. А ві попробуйте раскодировать и снова закодировать. PHP кодирует UTF-8 символы и вы получите что-то типа {"internal_id":"2","name":"u041fu0430u0440u0442u043du0435u0440","logo":"u0442u0435u0441u0442u043eu0432u044bu0435 u0434u0430u043du043du044bu0435"}

include $_SERVER['DOCUMENT_ROOT']."/api/config.php";
header('Content-type: text/html; charset=utf-8');

$data = file_get_contents('php://input');
$data = json_encode(json_decode($json));
$result = mysql_query("INSERT INTO test3 (id, rek) VALUES ('', '$data')");

Источник

Вам также может быть интересно:

Drag and Drop UWP — c# xaml mvvm
Вопрос: Нужно иметь возможность добавлять изображения в приложение путем перетаскивания из файловой системы У Grid включил AllowDrop. Но как добавить перетаскиваемые изображения в коллекцию? Т.к. те ...
Растягивание Высоты , Резина — html css html5
Вопрос: Здравствуйте! Реализовал резиновый дизайн. Растягивается ширина, но длина по % не растягивается. Возможно ли это реализовать? Или так и задумано, растягивание только на ширину ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
requestAnimation и очередность отрисовки — javascript canvas
Вопрос: Здравствуйте! Реализовал 2D игру и в Edge работает все плавно и круто, но в Firefox'e подвисает, сказали, что нужно сделать, чтобы раз-два момент и все ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
ViewPager внутри ViewPager — такие матрешки работают? — android viewpager
Вопрос: Доброго времени суток. Назрела новая задача. Есть каталог мастеров. При выборе конкретного мастера открывается его страница (активити с ViewPager), и теперь мастеров можно перелистывать свайпом. ...
Почему id всегда 1 Yii2 — yii авторизация
Вопрос: Использую все как по документации. Для получения информации о пользователе использую $identity = $model->findOne(]); И каким бы не был email, id пользователя всегда ...

Оставьте ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *