Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Везде UTF-8, а из переменной вопросики вместо русского текста...
 
 автор: BrokenBrake   (21.07.2007 в 22:10)   письмо автору
 
 

Здравствуйте!
Пользуясь случаем :) хочу поблагодарить форумчан и создателей форума, вы все мне очень помогли в последние дни, когда я ломал себе голову регулярными выражениями, пытался открывать и записывать файлы и т. д. Я теперь уже многое умею. Но все же и «поиск» теперь меня не выручает, столкнулся с проблемой, которую вообще не понимаю. Где копать?

В общем, суть в том, что определенный скрипт сперва получает список блогов (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 == )
  {
        
$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:23)   письмо автору
 
   для: BrokenBrake   (21.07.2007 в 22:10)
 

Добавлю, MySQL не используется, только PHP-файлы.

   
 
 автор: BrokenBrake   (21.07.2007 в 22:45)   письмо автору
 
   для: BrokenBrake   (21.07.2007 в 22:23)
 

Помимо всего этого система использует magpieRSS. Похоже, где-то там собака порылась :( А кода там прилично...

   
 
 автор: BrokenBrake   (21.07.2007 в 23:27)   письмо автору
 
   для: 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 ...

Вот и все. Устранили буржуйскую дискриминацию :)
Мда, прикольный у меня дебют-монолог на форуме.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования