blosxom plugin: anyencoding

blosxom starter kitでは文字コードにUTF-8を使うことが推奨されており、試しに色々と使ってみると、確かにRSSのことなどを考えるとデータはUTF-8の方が何かと便利だなあと思うようになってきました。しかしながら古いブラウザのことを考えるとShift_JISやEUC-JPの方がよいのでは、という考えも捨て難く、あれこれ考えた結果このようなプラグインを作ってみたのでした。

Encodeモジュールを必要とします。Encodeモジュールを利用するにはPerl 5.7.3以上が必要ですが、Perl 5.8以上であればEncodeモジュールは標準で入っています。

要はcontent_typeテンプレートから文字コード名を読み取り、出力するテキストをその文字コードに変換するものです。これで記事データ・テンプレート等を同じ文字コードに統一しておけば、content_typeテンプレートの設定によりそれぞれのフレーバーに適した文字コードを出力できる訳です。現在、徒書では記事データはUTF-8で持ち、htmlフレーバーではShift_JIS、RSSとwikieditish用のフレーバーではUTF-8で出力するようにしています。

Encodeモジュールの便利なところは、例えばUTF-8からShift_JISへ変換する場合、UnicodeにあってShift_JISに無い文字があった場合は、その文字をHTMLの数値文字参照に置き換えてくれる機能があるところです。御蔭で記事を書く際には、Unicodeにしかないような難しい漢字や記号等を使う時も、そのままテキストとして書くことができます。

追記(2005年4月20日)

Version: 2005-04-19 で、content_typeテンプレートから取得した文字コード名を $anyencoding::charset という変数に設定し、headテンプレート等で利用できるようにしました。

追記(2005年4月23日)

Encodeモジュールの代わりにJcodeモジュールを使用したjencodingプラグインを作りました。

追記(2005年9月8日)

Version: 2005-09-08 で、Encode::from_to の代わりに Encode::decodeEncode::encode を使うよう変更しました(参照: Encode::FB_HTMLCREFの変)。