API написанный с помощью SLIM раньше возвращал вопросы в Json вместо кириллицы.
После создания подключения, сразу первым запросом отправлял
$stmt = $this->con->prepare("SET NAMES 'utf8'");
, чтобы решить проблему.
Проблема решилась, но возникла другая - теперь json выглядит так:
{"shops":[{"id":40,
"name":"\u0422\u041a \u00ab\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439\u00bb",
"address":"\u0423\u0444\u0430, \u0443\u043b. \u0426\u044e\u0440\u0443\u043f\u044b, \u0434. 97, \u0422\u041a \u00ab\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439\u00bb","modeWork":"\u0415\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e \u0441 10:00 \u0434\u043e 22:00",
"url":"https:\/\/www.mvideo.ru\/shops\/S219",
"latitude":54.737,
"longitude":55.958,
"chain_stores_id":1,"chain_stores_name"
В приложении оно выглядит нормально, но мне хотелось все таки это исправить, чтобы тестировать api в postman
Как это можно исправить? Функция:
$app->get('/shops', function (Request $request, Response $response) {
$query = $request->getQueryParam('query');
$locality_id = $request->getQueryParam('locality_id');
$db = new DbOperation();
$shops = $db->getAllShops($locality_id, $query);
$response->getBody()->write(json_encode(array("shops" => $shops)));
});
Upd. Метод getAllShops:
function getAllShops($locality_id, $query){
$stmt = $this->con->prepare("SELECT shop.id, shop.name, shop.address, shop.mode_work, shop.url, shop.latitude, shop.longitude, shop.chain_stores_id, chain_stores.name, chain_stores.type, chain_stores.image_path FROM shop, chain_stores WHERE shop.chain_stores_id=chain_stores.id AND shop.locality_id=? AND shop.name LIKE ?");
$stmt-> bind_param("is", $locality_id, $query);
$stmt->execute();
$stmt->bind_result($id, $name, $address, $modeWork, $url, $latitude, $longitude, $chain_stores_id, $chain_stores_name,$chain_stores_type, $chain_stores_imagePath);
$shops = array();
while($stmt->fetch()){
$temp = array();
$temp['id'] = $id;
$temp['name'] = $name;
$temp['address'] = $address;
$temp['modeWork'] = $modeWork;
$temp['url'] = $url;
$temp['latitude'] = $latitude;
$temp['longitude'] = $longitude;
$temp['chain_stores_id'] = $chain_stores_id;
$temp['chain_stores_name'] = $chain_stores_name;
$temp['chain_stores_type'] = $chain_stores_type;
$temp['chain_stores_imagePath'] = $chain_stores_imagePath;
array_push($shops, $temp);
}
return json_encode($shops,JSON_UNESCAPED_UNICODE);
}
Для того, чтобы Unicode-символы возвращались "как есть" используйте опцию JSON_UNESCAPED_UNICODE
json_encode($array, JSON_UNESCAPED_UNICODE);
Описание всех опций http://php.net/manual/ru/json.constants.php
Пример использования этой опции в контексте SLIM-фреймворка:
return $response
->withStatus(200)
->withHeader("Content-Type", "application/json;charset=utf-8")
->write(json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
// добавлена опция JSON_UNESCAPED_UNICODE
$app->get('/shops', function (Request $request, Response $response) {
$query = $request->getQueryParam('query');
$locality_id = $request->getQueryParam('locality_id');
$db = new DbOperation();
$shops = $db->getAllShops($locality_id, $query);
$shops = json_decode($shops); // <--- вот таким образом
$response->getBody()->write(json_encode(shops, JSON_UNESCAPED_UNICODE));
});
Виртуальный выделенный сервер (VDS) становится отличным выбором
Необходимо создать пользовательскую кнопку в админке постаКнопку разобрался как создать и вывести в админке
Кто знаком с Instagram API? Клиент вводит ссылку на свой профиль instagram и нужно получить информации о немКто может подсказать?
Всем добрый вечер, я бы хотела проконсультироваться у опытных разработчиковХочу реализовать такую задачу:
есть задачаИсходные два числа хранятся в текстовом файле в произвольной последовательности