|
|
|
| Здравствуйте!
Пользуясь случаем :) хочу поблагодарить форумчан и создателей форума, вы все мне очень помогли в последние дни, когда я ломал себе голову регулярными выражениями, пытался открывать и записывать файлы и т. д. Я теперь уже многое умею. Но все же и «поиск» теперь меня не выручает, столкнулся с проблемой, которую вообще не понимаю. Где копать?
В общем, суть в том, что определенный скрипт сперва получает список блогов (Atom), который, естественно, в UTF-8. Оттуда мы выдергиваем идентификаторы, ссылки и названия (title). А после в другом скрипте используем эти данные. Так вот проблема в том, что блоги с русскими названиями отображаются сплошными вопросами. Все файлы PHP в UTF-8, кодировка страницы тоже UTF-8. Все остальное работает отлично, но вот только с этим затык. В принципе, можно было бы просто бросить, но не могу.
Это фрагмент из первого файла. Здесь получаем список блогов ($BLOG_LIST)
<?php
// method: request blog list
function request_blog_list()
{
$BLOG_LIST = array(); // return
$method = HTTP_REQUEST_METHOD_GET;
// set blog id
$this->blog_id = ( !empty($blog_id) ) ? $blog_id : $this->blog_id;
// prep check
if ( !$this->_is_login_prepared() ) return 0;
// request scope, set request url
if ( !$this->request_scope($force=1) ) return 0;
$request_url = $this->service_scope . '/feeds/default/blogs';
// get authorization token
if ( !$auth_token = $this->request_clientlogin_token($this->service, $force=0) )
{
$this->_trigger_request_error('unable to retrieve auth token');
return 0;
}
// prepare and send request
$this->GreqoClient->setURL($request_url);
$this->GreqoClient->setMethod($method);
$this->GreqoClient->addHeader('authorization', 'GoogleLogin auth=' . $auth_token);
$this->_send_client_request();
// process response
if ( $this->GreqoResponse->code_class == 2 )
{
$BLOG_LIST = $this->atom_to_array($this->GreqoResponse->body);
}
// return
return $BLOG_LIST;
}
// END method
|
Далее этот класс используется в другом скрипте (тоже фрагмент). Вопросики получаются на месте переменной $blog_title.
<?php
// get blog list
if ( $BLOG_LIST = $GreqoBlogger->request_blog_list() )
{
#print_r($BLOG_LIST);
$list_html = '';
$is_first = 0;
foreach ( $BLOG_LIST['ITEM'] as $_BLOG_DATA )
{
// get blog id num
$_cue = '.blog-';
$blog_id = substr($_BLOG_DATA['id'], strpos($_BLOG_DATA['id'], $_cue) + strlen($_cue));
$blog_title = $_BLOG_DATA['title'];
$checked = '';
if ( !$is_first )
{
$checked = ' checked="checked" ';
$is_first = 1;
}
$list_html .= "<input type=\"radio\" name=\"blog_id\" value=\"{$blog_id}\"{$checked}/> <input type=\"text\" value=\"{$blog_id}\" />$blog_title<br />";
}
$debug_note = ( $GreqoBlogger->debug ) ? '' : '';
$_HTML['blog_list'] = <<<HTML
$debug_note
|
Подскажите, пожалуйста, куда мне копать. | |
|
|
|
|
|
|
|
для: BrokenBrake
(21.07.2007 в 22:10)
| | Добавлю, MySQL не используется, только PHP-файлы. | |
|
|
|
|
|
|
|
для: BrokenBrake
(21.07.2007 в 22:23)
| | Помимо всего этого система использует magpieRSS. Похоже, где-то там собака порылась :( А кода там прилично... | |
|
|
|
|
|
|
|
для: BrokenBrake
(21.07.2007 в 22:10)
| | Ура! Проблему решил, и совсем она была не там, где я думал изначально. В общем, надеюсь, что кому-то решение будет еще полезно, потому что magpieRSS довольно популярная штука. Но, на мой взгляд, незаслуженно совершенно :( столько времени угробил, а все из-за того, что разработчики посчитали, видимо, кодировку UTF-8 ущербной, в подметки не годящейся самой правильной - ISO-8859-1.
Итак, напрягая мозг, с помощью запроса в гугле, «+magpierss +atom +utf-8 +russian» нашел тему на форуме RunCMS, которая меня и натолкнула на путь истинный. Только я немного по-другому сделал.
Необходимо внести изменения в двух файлах в каталоге magpierss: rss_fetch.inc и rss_parse.inc.
В файле rss_fetch.inc ищем строчку define('MAGPIE_OUTPUT_ENCODING', 'ISO-8859-1');, она должна быть 358-ой.
<?php #blablabla ...
define('MAGPIE_OUTPUT_ENCODING', 'ISO-8859-1');
#blablabla ...
|
Тут вместо дурацкой ISO-8859-1 пишем UTF-8, конечно же, и сохраняем. Аналогичную операцию необходимо провести с файлом rss_parse.inc, в котором нужно найти строчку function MagpieRSS ($source, $output_encoding='ISO-8859-1', (скорей всего будет 94-ой).
<?php #blablabla ...
function MagpieRSS ($source, $output_encoding='ISO-8859-1',
#blablabla ...
|
Вот и все. Устранили буржуйскую дискриминацию :)
Мда, прикольный у меня дебют-монолог на форуме. | |
|
|
|