SLIM проблема с кодировкой

213
14 июля 2018, 12:20

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);
    }
Answer 1

Для того, чтобы 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
Answer 2
$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));
});
READ ALSO
Создание события на новый элемент в админ панеле WP

Создание события на новый элемент в админ панеле WP

Необходимо создать пользовательскую кнопку в админке постаКнопку разобрался как создать и вывести в админке

186
Нужна помощь с Instagram API

Нужна помощь с Instagram API

Кто знаком с Instagram API? Клиент вводит ссылку на свой профиль instagram и нужно получить информации о немКто может подсказать?

202
Реализация онлайн игры

Реализация онлайн игры

Всем добрый вечер, я бы хотела проконсультироваться у опытных разработчиковХочу реализовать такую задачу:

196
Не считывается символ + из файла php.

Не считывается символ + из файла php.

есть задачаИсходные два числа хранятся в текстовом файле в произвольной последовательности

175