Forum Webscript.Ru
Программирование => Perl => Тема начата: glebushka от 18 Сентября 2005, 18:19:08
-
Например есть строка:
my $string="Когда, наконец, выйдет "e;Перл 6"e;?";
Хочу получить первые 25 символов. Например, так:
$string=~m/^(.{0,25}).*/;
my $short_string=$1;
Получаем вполне закономерный результат:
"Когда, наконец, выйдет &q"
Но, как несложно догадаться, это не совсем то, что хочется получить.
Каким способом можно решить проблему? Учитывая что символы могут иметь как буквенные, так и цифровые коды?
-
Попробуй например, сначала заменить все " на кавычки
а после отрезания произвести обратную замену кавычек на "
-
$string=~s/\\"/\\"/g;
$string=~m/^(.{0,25}).*/;
my $short_string=$1;
$short_string=~s/\\"/\\"/g;
Я не знаю, может быть есть замена, которая автомически переводит все символы типа &...; в нормальные...
-
Корепанов Иван, это понятно:) Но "e; в качестве примера. Таким макаром придётся всю таблицу символов перебивать. Что-то слишком сложно. Наверняка кто-нить по этому поводу модуль на CPAN выложил, только бы понять каким запросом его искать.
-
тогда ничего другого не могу предложить :)
-
Только HTML коды?
Есть модуль http://search.cpan.org/~frighetti/HTML-Encoder-0.00_04/
HTML::Encoder, который переводит спец. символы в HTML коды.
Думаю чуть доработать его на обратное, вставить регулярки и пройтись по ключам его хеша, заменяя в строке на значения элементов хеша.
-
glebushka
CGI::unescape пробовал?
upd. сори, не понял задачи.
Я бы взял html_unescape из HTML::Stream
-
NeoNox
Спасибо за наводку. В описании к самому модулю HTML::Stream порекомендавли заюзать для моих целей функцию decode из HTML::Entities. Его и заюзал.
(вот что по поводу html_unescape в доке:
Note: provided for convenience and backwards-compatibility only. You may want to use the more-powerful HTML::Entities::decode function instead: unlike this function, it can collapse entities like copy and ccedil into their Latin-1 byte values.)