Forum Webscript.Ru
Программирование => Perl => Тема начата: Atreides от 27 Марта 2005, 20:16:40
-
Подскажите, как заменить в строке все русские буквы на их шестнадцатеричные коды вида %xx то есть чтобы строка "абв" выглядела как "%E0%E1%E2". Заранее спасибо, кого не заломает ответить 8)
-
Фу ты, даже "regexp" не могу нормально написать...
-
попробуй написать сам, я помогу
да, и поясни, пожалуйста, какие критерии русских букв?
-
Русские буквы выхватываю так: $string =~ s/[\\xE0-\\xFF]?/.../g; вопрос - что написать в замену?
-
ага, хорошо
вариант 1
$string =~ s/([\\xE0-\\xFF])/sprintf( "%%%02X", $1 )/eg;
вариант2 (более быстрый)
# предварительно создадим массив следующего содержания
for( 0 .. 255 ) {
$chr2hex{ chr() } = sprintf( "%%%02X", $_ );
}
# и упрощаем рег. выражение
$string =~ s/([\\xE0-\\xFF])/$chr2hex{$1}/g;
-
ок, написал.
#!/usr/bin/perl
$string = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
$string =~ s/([\\xE0-\\xFF])/sprintf( "%%%02X", $1 )/eg;
print $string;
результат:
%00%00%00%00%00%00ё%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00
где я торможу?
-
Фух, домучал наконец. Вот это вроде работает:
$string =~ s/([\\xA8,\\xB8,\\xC0-\\xFF])/sprintf("%%%02X", ord($1))/eg;
-
да, прошу прощения, ord забыл : )