Большая красная кнопка для возвращения на главную страницу

Разделы

Последние записи

Тэги

Последние комментарии

  • Саша: Нашел достаточно удобный серви для перевода текста из одной кодировки read more
  • M@: У-у-у... Это слишком свежая для меня версия, здесь я вряд read more
  • alex: Я почему-то не нашел в файле util.pm строки - my read more
  • kost: MT говорит: Movable Type 3.21 Стоял MT 3.2, я его read more
  • M@: Спасибо за поправку. А на какой версии МТ это происходило, read more
  • kost: my $s = $converter->convert($s); Эта строчка забивает error.log ошибками: "my" read more
  • Владимир Яшников: Весьма полезно. Что называется, хозяке на заметку. :) read more

Другие места

По делу
Веблог /  Movabletype  /
 

Dirify (который делает ЧПУ, то есть человекопонятные URL) — исключительно полезная вещь. А UTF-8 — исключительно правильная кодировка. Единственная проблема: в поставке по умолчанию Movabletype не разумеет русских символов. Разные люди решают её разными путями, мне милее хаки — по причинам, которые я объснял в заметочке о Movabletype версии 3.2.

Для совершения очередного такого хака нам на помощь в очередной раз приходит добрый, но сварливый гений — Михаил Иванков.

Прямыми, без признаков дрожи, руками он вскрывает многострадальный файл util.pm, о препарации которого много писал покинувший нас Влад Головач, и правит код. Решение получается не то чтобы изящное и универсальное (потому что было лень искать соответствия юникодовских символов), но вполне себе действенное. Итак, что происходит:

1. Сначала мы учим МТ понимать windows-1251 по методу Baka, для чего находим в util.pm строки my %HighASCII = ( «\xc0» => ’A’, # A` # … ещё много строк) и меняем то, что стоит в апострофах на латинскую букву (или несколько) по вкусу. Файлик с примерными соответствиями символов ждет вас здесь.

Если вы используете кодировку 1251, то на этом можно остановиться.

2. Если же вам милее UTF-8, то продолжаем терзать util.pm. Еще в двух местах делаем нижеследующие правки.

Было:
===========
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 |

Комментарии (7)

Весьма полезно. Что называется, хозяке на заметку. :)

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 )

Оставить комментарий


Все заметки в разделе «Movabletype»

Русификация MovableType от blog.lexa.ru, January 2, 2007 5:21 PM


-->