何度か、ご指摘いただいたのですが、ココのところ、生成されるRSSがおかしくなっていることがありました。具体的には、「カブトムシ」と「3.2になって」の二件のエントリのタイトルに関してです。このままでは、タダでさえ少ない読者様が離れていってしまうかもしれない…… oTL
急いで解決するんだっ!! > おれ
と、いうわけで、解決しました。このサイトは、内部的にeuc-jpで記事が管理されていて、RSSはUTF-8にして配信するようにしています。このために、mt-jcode.plというプラグインを利用しています。結論から言えば、これがうまく機能していなかったのです。このプラグインに手を入れて、問題を修正しました。ご指摘くださった皆様、ありがとうございました、ご迷惑をおかけしました。
このプラグインは、渡された文字列を、Jcode::getcode()に渡して、文字コードの判定を行なってから、指定された文字コード(この場合はUTF-8)への変換を行なってくれます。ところが、この種の自動コード判別の常で、文字列長が充分でない場合には、文字コードの判別を失敗することがあるのです。実際、「3.2になって」だの「カブトムシ」だのは短すぎて誤判別されてしまったわけです。
記事の文字コードに、何を使っているのか、これはMovableTypeが知っています。従って、自動判別を止め、MovableTypeにお伺いを立てて、変換をするようにすれば、この問題は解決します。具体的にはmt-jcode.plを次のようにします。(短いので全てを掲載します。)package MT::Plugin::Jcode;
use MT::Template::Context;
MT::Template::Context->add_global_filter(jcode => sub {
my($str, $code, $ctx) = @_;
require Jcode;
my $cfg = MT::ConfigMgr->instance;
my $from = {'SHIFT_JIS' => 'sjis',
'ISO-2022-JP' => 'jis',
'EUC-JP' => 'euc',
'UTF-8' => 'utf8'}->{uc($cfg->PublishCharset)} || 'utf8';
# my $from = Jcode::getcode($str) || 'utf8'; これはオリジナルのコード(コメントアウト)
return eval { Jcode->new($str, $from)->$code() } || $str;
});
1;
use MT::Template::Context;
MT::Template::Context->add_global_filter(jcode => sub {
my($str, $code, $ctx) = @_;
require Jcode;
my $cfg = MT::ConfigMgr->instance;
my $from = {'SHIFT_JIS' => 'sjis',
'ISO-2022-JP' => 'jis',
'EUC-JP' => 'euc',
'UTF-8' => 'utf8'}->{uc($cfg->PublishCharset)} || 'utf8';
# my $from = Jcode::getcode($str) || 'utf8'; これはオリジナルのコード(コメントアウト)
return eval { Jcode->new($str, $from)->$code() } || $str;
});
1;
笹
初めまして。
上記エントリーには、お世話になりました。
ところで、この記事にトラックバックさせていただこうとURLを入力したところ、Pingエラー扱いされてしまい、正しくトラックバックできませんでした。
ですが今こちらを見たところ、重複してトラックバックされている状態になっていたので、お詫び申し上げます。申し訳ありません。
重複分は削除していただければと思います。
お手数ですが、どうぞよろしくお願いいたします。
hiro
良くわからないのですが、わたしも、他のサイトにトラックバック掛けるとエラーになることがあります。エラーなのに相手側にはトラックバックされているのです。原因は良くわかってません。とほほ。一番新しいのだけ残しておきます。