Dirify (который делает ЧПУ, то есть человекопонятные URL) исключительно полезная вещь. А
Для совершения очередного такого хака нам на помощь в очередной раз приходит добрый, но сварливый гений Михаил Иванков.
Прямыми, без признаков дрожи, руками он вскрывает многострадальный файл util.pm, о препарации которого много писал покинувший нас Влад Головач, и правит код. Решение получается не то чтобы изящное и универсальное (потому что было лень искать соответствия юникодовских символов), но вполне себе действенное. Итак, что происходит:
1. Сначала мы учим МТ понимать
Если вы используете кодировку 1251, то на этом можно остановиться.
2. Если же вам милее
Было:
===========
sub dirify {
($MT::VERSION && MT->instance->{cfg}->PublishCharset =~ m/utf-?8/i)
? utf8_dirify(@_) : iso_dirify(@_);
}
===========
Стало:
===========
#ivankov edited
sub dirify {
($MT::VERSION && MT->instance->{cfg}->PublishCharset =~ m/utf-?8/i)
? iso_dirify(@_) : iso_dirify(@_);
}
#ivankov edited
===========
Было:
==========
my $HighASCIIRE = join '|', keys %HighASCII;
sub convert_high_ascii {
my($s) = @_;
$s =~ s/($HighASCIIRE)/$HighASCII{$1}/g;
$s;
}
==========
Стало:
==========
my $HighASCIIRE = join '|', keys %HighASCII;
sub convert_high_ascii {
my($s) = @_;
# ivankov insert
use Text::Iconv;
my $converter = Text::Iconv->new('UTF-8', 'WINDOWS-1251');
my $s = $converter->convert($s);
# ivankov insert
$s =~ s/($HighASCIIRE)/$HighASCII{$1}/g;
$s;
}
==========
Все. Теперь работает. Пример можно посмотреть на Cityforms.ru. Собственно, теперь, меняя значения кодировок в функциях конверсии, можно конвертировать что угодно и куда угодно.
Автор: M@, 19.04.2006 |
Весьма полезно. Что называется, хозяке на заметку. :)
my $s = $converter->convert($s);
Эта строчка забивает error.log ошибками:
"my" variable $s masks earlier declaration in same scope at ../../lib/MT/Util.pm line 637
исправил на:
$s = $converter->convert($s);
$s уже определена четырьмя строчками выше.
Спасибо за поправку. А на какой версии МТ это происходило, если не секрет?
MT говорит: Movable Type 3.21
Стоял MT 3.2, я его апгрейдил до 3.3, вроде.
Но я думаю, версия MT здесь ни при чем.
Я почему-то не нашел в файле util.pm строки - my %HighASCII =
Но у меня версия 3.35
Как еще решить проблему для windows-1251?
У-у-у... Это слишком свежая для меня версия, здесь я вряд ли окажусь полезен. Я жду выхода МТ4 (уже есть release candidate! ;)), вот тогда буду переходить на новую, и писать, соответственно, про нее.
Нашел достаточно удобный серви для перевода текста из одной кодировки в другую: http://rgo.ru/projects/soft_online/kodirovka/
Нашел на сайте "География. Планета Земля" ( http://rgo.ru )