Возвращаются вопросы в json

154
25 июня 2018, 03:10

при отправки GET-запроса возвращаются вопросы вместо кириллицы. Как можно исправить? Использую SLIM в PHP Ответ приходит в таком виде:

{"cities":[{"id":1,"region":"????????? ????","autonom":null,"area":"???????? ?????","city":"????????","city_2":null},
{"id":2,"region":"????????? ????","autonom":null,"area":"???????? ?????","city":"???????????????","city_2":null},
{"id":3,"region":"????????? ????","autonom":null,"area":"???????? ?????","city":"???????????","city_2":null}

index.php

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
require '../vendor/autoload.php';
require_once '../includes/DbOperation.php';
//Creating a new app with the config to show errors
$app = new \Slim\App([
    'settings' => [
        'displayErrorDetails' => true
    ]
]);
....
$app->get('/cities', function (Request $request, Response $response) {
    $db = new DbOperation();
    $cities = $db->getAllCities();
    $response->getBody()->write(json_encode(array("cities" => $cities)));
});
...
$app->run();

DbOperation.php

<?php
class DbOperation
{
    private $con;
    function __construct()
    {
        require_once dirname(__FILE__) . '/DbConnect.php';
        $db = new DbConnect();
        $this->con = $db->connect();
    }
....
function getAllCities(){
        $stmt = $this->con->prepare("SELECT id, region, autonom, area, city, city_2 FROM locality");
        $stmt->execute();
        $stmt->bind_result($id, $region, $autonom, $area, $city, $city_2);
        $cities = array();
        while($stmt->fetch()){
            $temp = array();
            $temp['id'] = $id;
            $temp['region'] = $region;
            $temp['autonom'] = $autonom;
            $temp['area'] = $area;            
            $temp['city'] = $city;
            $temp['city_2'] = $city_2;
            array_push($cities, $temp);
        }
        return $cities;
    }
....
}

DbConnect.php

<?php
class DbConnect
{
    //Variable to store database link
    private $con;
    //Class constructor
    function __construct()
    {
    }
    //This method will connect to the database
    function connect()
    {
        //Including the constants.php file to get the database constants
        include_once dirname(__FILE__) . '/Constants.php';
        //connecting to mysql database
        $this->con = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
        //Checking if any error occured while connecting
        if (mysqli_connect_errno()) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
            return null;
        }
        //finally returning the connection link
        return $this->con;
    }
}
Answer 1

Варианты лечения:

// Демо вариант 
$js = '{
    "cities": [{
        "id": 1,
        "region": "Алтайский край"
    }, {
        "id": 2,
        "region": "Калининградская область"
    }, {
        "id": 3,
        "region": "Брянская область"
    }]
}';
// #1 ------------------------------------------
$ecnd = utf8_encode($js); // Пропустить через utf8_encode
$decnd = utf8_decode($ecnd);  // Принять utf8_decode
// #2 -------------------------------------------
header('Content-type: application/json;charset=utf-8'); // Добавить HEADER
echo json_encode($js); 
 // #3 Опция добавления к json_encode вторым аргументом
// ,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES 

Доки 1

Доки 2

Answer 2

Я решил так: оправил после создания соединения $stmt = $this->con->prepare("SET NAMES 'utf8'");

Код:

function __construct()
    {
        require_once dirname(__FILE__) . '/DbConnect.php';
        $db = new DbConnect();
        $this->con = $db->connect();
        $stmt = $this->con->prepare("SET NAMES 'utf8'");
        $stmt->execute();
    }
READ ALSO
Повторяются записи при запросе. SQL. PHP

Повторяются записи при запросе. SQL. PHP

Пользователь подписывается на определенные категории новостейНапример, на чемпионат Эстонии и на клуб Челси

177
При нажатии на submit не происходит перезагрузки страницы

При нажатии на submit не происходит перезагрузки страницы

Начал догадываться, что это из-за того, что на странице submit изначально не лежал, по этому и не случаеться событиеНо всё же решил спросить, как...

209
Правильно сделать ООП

Правильно сделать ООП

Привык к процедурному стилю, сейчас со скрежетом перехожу на ООП, помогитеПравильно ли я написал код так все работает, но мне кажется нужно...

159
Долго выгружаются данные в из HTML в PDF

Долго выгружаются данные в из HTML в PDF

Есть необходимость реализовать конвертор из HTML в PDF продукцииВсе настроено все реализовано, но есть проблема, 25 страниц конвертируется за 75 секунд,...

173