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

Форум PHP

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

 

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

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

тема: Помогите раскодировать строку
 
 автор: BMW   (04.08.2008 в 14:07)   письмо автору
 
 

Как узнать в чем закодирована строчка:
1)29-May-2008 =?KOI8-R?B?68/MzMXL1 =?GB2312?B?p7Gn4Kfpp+Sn0S 

И как ее перекодировать в русские символы как есть!

  Ответить  
 
 автор: BinLaden   (04.08.2008 в 14:11)   письмо автору
 
   для: BMW   (04.08.2008 в 14:07)
 

<?php

function decode_header($header$out_charset)
{
    
preg_match_all('/=\\?(.+?)\\?(.+?)\\?(\\S+)/'$header$matches);

    for(
$i 0$i count($matches[0]); $i++)
    {
        switch( 
strtoupper($matches[2][$i]) )
        {
            case 
'B'$matches[3][$i] = imap_base64($matches[3][$i]); break;
            case 
'QP'$matches[3][$i] = imap_qprint($matches[3][$i]); break;

            default:

            
trigger_error('Аллах акбар!'); // , E_USER_ERROR :))

            
return false;
        }
    
        if( 
strtoupper($matches[1][$i]) != strtoupper($out_charset) )
        {
            
$matches[3][$i] = iconv($matches[1][$i], $out_charset '//IGNORE'$matches[3][$i]);
        }
    }

    return 
str_replace($matches[0], $matches[3], $header);
}

echo 
decode_header('1)29-May-2008 =?KOI8-R?B?68/MzMXL1 =?GB2312?B?p7Gn4Kfpp+Sn0S (4587 chars)''windows-1251');
?>

  Ответить  
 
 автор: BMW   (04.08.2008 в 14:31)   письмо автору
 
   для: BinLaden   (04.08.2008 в 14:11)
 

ОООО спасибо те дядюшка Бен)))...за то что в очередной раз помог капиталистическому концерну BMW))....и особенно, за Аллах Акбар)))

  Ответить  
 
 автор: BMW   (04.08.2008 в 15:04)   письмо автору
 
   для: BinLaden   (04.08.2008 в 14:11)
 

А если в некоротых местах выходит Аллах акбар??? что значит????? как в этом случае быть??

  Ответить  
 
 автор: BinLaden   (04.08.2008 в 15:18)   письмо автору
 
   для: BMW   (04.08.2008 в 15:04)
 

Замените на

<?php
trigger_error
('Unknown encoding: ' $matches[2][$i]);
?>


И покажите. И вообще весь заголовок, если не трудно.

Это означает, что обнаружен неизвестный тип кодирования информации. Я вообще в этих делах почтовых не разбираюсь, поэтому строго не судите.

P.S. Да и паттерн надо поправить: '/=\\?(.+?)\\?(.+?)\\?(.+?)(\\s|\\?=|$)/'

  Ответить  
 
 автор: BMW   (04.08.2008 в 15:22)   письмо автору
 
   для: BinLaden   (04.08.2008 в 15:18)
 

Вот это он не смог прокодировать:
=?KOI8-R?B?7tUg18/UIMXT3sUgzs/Xz8Ug0MnT2M3M?=

  Ответить  
 
 автор: BinLaden   (04.08.2008 в 15:25)   письмо автору
 
   для: BMW   (04.08.2008 в 15:22)
 

> '/=\\?(.+?)\\?(.+?)\\?(.+?)(\\s|\\?=|$)/'

  Ответить  
 
 автор: BMW   (04.08.2008 в 15:28)   письмо автору
 
   для: BinLaden   (04.08.2008 в 15:25)
 

О!!!! пошло! Спасибочки)))) это помогло))!!

  Ответить  
 
 автор: BinLaden   (04.08.2008 в 15:34)   письмо автору
 
   для: BMW   (04.08.2008 в 15:28)
 

Кстати, там чтобы пробел в первом случае не потерялся, лучше сделать так:

<?php

function decode_header($header$out_charset)
{
    
preg_match_all('/=\\?(.+?)\\?(.+?)\\?(.+?)((\\s)|\\?=|$)/'$header$matches);

    for(
$i 0$i count($matches[0]); $i++)
    {
        switch( 
strtoupper($matches[2][$i]) )
        {
            case 
'B'$matches[3][$i] = imap_base64($matches[3][$i]); break;
            case 
'QP'$matches[3][$i] = imap_qprint($matches[3][$i]); break;

            default:

            
trigger_error('Unknown encoding: ' $matches[2][$i]);

            return 
false;
        }
    
        
$matches[3][$i] .= $matches[5][$i];
    
        if( 
strtoupper($matches[1][$i]) != strtoupper($out_charset) )
        {
            
$matches[3][$i] = iconv($matches[1][$i], $out_charset '//IGNORE'$matches[3][$i]);
        }
    }

    return 
str_replace($matches[0], $matches[3], $header);
}

echo 
decode_header('=?KOI8-R?B?68/MzMXL1 =?GB2312?B?p7Gn4Kfpp+Sn0S =?KOI8-R?B?7tUg18/UIMXT3sUgzs/Xz8Ug0MnT2M3M?=''windows-1251');
?>

  Ответить  
Rambler's Top100
вверх

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