API

День добрый. Есть такой плагин, живущий только на гитхабе, под названием API. Попытался использовать его и обнаружил, что лично у меня он выдаёт ответы в кодировке koi7, а хотелось бы utf-8. Подскажите, пожалуйста, может кто помнит где и что подкрутить.

10 комментариев

avatar
неплохо бы ссылку на плагин.
avatar
avatar
Может дело в настройках сервера? Например если апач, то прописать в файл .htaccess в корне плагина AddDefaultCharset UTF-8
P.S.: вы уже перешли на 2.0? )
avatar
1. Не помогло.
2. Нет и это в принципе невозможно пока, слишком многое умрёт.
avatar
Посмотрел плагин. Все файлы в кодировке UTF-8.
1. Попробуйте в файле application/plugins/api/classes/actions/ActionMain.class.php В функции Init указать следующий код:
header('Content-Type: text/html; charset=utf-8');

По идее кодировка явно указана в файле index.php в корне сайта.
2. Если первый вариант не помог, скорее всего надо колдовать с настройками сервера.

Пришлите ссылку на сайт.
avatar
Спасибо, но не помогло. По идее json создаётся где-то в недрах движка средствами php, вероятно следует поискать где-то там. Пока не могу найти, проблема только с json всё остальное работает в нормальной кодировке. Вот пример, запрос списка блогов.
avatar
С ответом сервера все в порядке.
$s='{"response":{"collection":{"29":{"blog_title":"\u0421\u0442\u0438\u0445\u0438 (\u0432\u043d\u0435 \u0436\u0430\u043d\u0440\u043e\u0432)"},"30":{"blog_title":"\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0437\u0430 (\u0432\u043d\u0435 \u0436\u0430\u043d\u0440\u043e\u0432)"},"217":{"blog_title":"\u041b\u044e\u0431\u043e\u0432\u043d\u0430\u044f \u043b\u0438\u0440\u0438\u043a\u0430"},"3":{"blog_title":"\u041d\u043e\u0432\u043e\u0441\u0442\u0438 \u0441\u0430\u0439\u0442\u0430"},"221":{"blog_title":"\u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u0430\u044f \u043b\u0438\u0440\u0438\u043a\u0430"},"218":{"blog_title":"\u0413\u0440\u0430\u0436\u0434\u0430\u043d\u0441\u043a\u0430\u044f \u043b\u0438\u0440\u0438\u043a\u0430"},"225":{"blog_title":"\"\u0412\u0435\u0441\u0451\u043b\u0430\u044f\"  \u043f\u043e\u044d\u0437\u0438\u044f"},"219":{"blog_title":"\u041f\u0435\u0439\u0437\u0430\u0436\u043d\u0430\u044f \u043b\u0438\u0440\u0438\u043a\u0430"},"177":{"blog_title":"\u041c\u0443\u0437\u044b\u043a\u0430 (\u0431\u0435\u0437 \u0436\u0430\u043d\u0440\u043e\u0432, \u043e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b)"},"229":{"blog_title":"\u041c\u0430\u043b\u044b\u0435 \u043f\u0440\u043e\u0437\u0430\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u044b"}},"count":"33"},"sMsgTitle":"","sMsg":"","bStateError":false}';
print_r(json_decode($s));
exit;


Выдает
stdClass Object ( [response] => stdClass Object ( [collection] => stdClass Object ( [29] => stdClass Object ( [blog_title] => Стихи (вне жанров) ) [30] => stdClass Object ( [blog_title] => Современная проза (вне жанров) ) [217] => stdClass Object ( [blog_title] => Любовная лирика ) [3] => stdClass Object ( [blog_title] => Новости сайта ) [221] => stdClass Object ( [blog_title] => Философская лирика ) [218] => stdClass Object ( [blog_title] => Гражданская лирика ) [225] => stdClass Object ( [blog_title] => "Весёлая" поэзия ) [219] => stdClass Object ( [blog_title] => Пейзажная лирика ) [177] => stdClass Object ( [blog_title] => Музыка (без жанров, общий раздел) ) [229] => stdClass Object ( [blog_title] => Малые прозаические формы ) ) [count] => 33 ) [sMsgTitle] => [sMsg] => [bStateError] => )


Смотрите код получателя.
avatar
Лиса например на лету перекодирует, а хром нет. В результате в клиенте просто пишу функцию по перебору и перекодированию посимвольно.)
avatar
www.php.net/manual/ru/function.json-encode.php
Можно попробовать поэкспериментировать с параметрами функции json-encode
echo "Юникод: ",     json_encode($a, JSON_UNESCAPED_UNICODE), "\n";


Здесь сама функция находится framework/classes/modules/viewer/Viewer.class.php:386
if ($sType == 'json') {
            if ($this->bResponseSpecificHeader and !headers_sent()) {
                header('Content-type: application/json');
            }
            echo json_encode($this->aVarsAjax);
        } 
avatar
Во. Спасибо. Тут должно взлететь. ))
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.