Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Кодировка non-ASCII символов


Автор: olexdj 23.2.2013, 18:10
Кодирую non-ASCII символы в заголовках отправляемого письма, чтобы текст приходил не белибердой в полях FROM, TO, SUBJECT

Код

$t = "Hi all я тут по-русски write some текст";

use MIME::Base64;
print &check($t);

sub check {
    my $c = shift;
    $c =~ s/([^\x00-\x7F]+)/&replace($1)/eg;
    return $c;
} # sub

sub replace {
    my $a = shift;
    $a = MIME::Base64::encode($a,"");
    $a = "=?windows-1251?B?".$a."?=";
    return $a;
} # sub


Норм работает, но обрабатывает отдельно каждое слово, т.е. получаю:

Код

Hi all =?windows-1251?B?/w==?= =?windows-1251?B?8g==?= =?windows-1251?B?7g==?=-=?windows-1251?B?6A==?= write some =?windows-1251?B?8g==?=


Как бы его сделать, чтобы регулярка игнорировала 1 символ между non-ASCII символами, пробел, дефис, etc, чтобы кодировалось не отдельно каждое слово, а фразы.

Спасибо!

Автор: Pfailed 24.2.2013, 08:40
Код

$c =~ s/((?:[^\x00-\x7F]+[\s-]?)+)/&replace($1)/eg;

Автор: olexdj 24.2.2013, 09:46
Pfailed, йееееееееее!! Работает!!! )))  smile

Добавлено через 1 минуту и 55 секунд
Pfailed, Спасибище! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)