Error: I'm afraid this is the first I've heard of a "$flavour" flavoured Blosxom. Try dropping the "/+$flavour" bit from the end of the URL.
Encode::FB_HTMLCREFの変
PerlのEncodeモジュールとJcodeモジュールがバージョンアップしたそうなので、自宅PCのCygwin環境にインストールしてみたのです。するとその環境にある動作確認用blosxomが文字化けを起こしていまして。
動作確認用blosxomでもここと同じく、Encodeを利用したanyencodingプラグインを使っているのですが、どうもEncode::FB_HTMLCREF
という定数の値が、バージョンアップ前と後で変わっているのが原因らしく。
試しに自宅PC (perl v5.8.5, Encode.pm v2.10) とLinux機 (perl v5.8.1, Encode.pm v1.98) とでEncode::FB_HTMLCREF
の値を出力したところ、以下の通りとなりました。
$ perl -MEncode -e 'print Encode::FB_HTMLCREF,$/;' 520
$ perl -MEncode -e 'print Encode::FB_HTMLCREF,$/;' 512
取り敢えず、anyencodingのソースで
と書いているところを、512の数値にしてしまえば文字化けを回避できるのですが、果たしてそういう対処でよいのかどうか……。Encode::FB_HTMLCREF()
Encode 2.10のドキュメントをよく読むと、"In Encode 2.10 or later,
" (註: LEAVE_SRC = 8)とちゃんと書いてありました。なのでLEAVE_SRC
is also implied.FB_HTMLCREF
が520になるのは仕様ということでよさそうです。
また、色々試したところ、UTF-8からShift_JISへの変換で、
Encode::from_to($str, 'utf8', 'shiftjis', Encode::FB_HTMLCREF);
では変換に失敗するけれど、
$str = encode('shiftjis', decode('utf8', $str), Encode::FB_HTMLCREF);
であれば、正しく変換(かつ、Shift_JISに無い文字はHTMLの数値文字参照に変換)されるようでした。なのでfrom_to
の代わりにdecode
とencode
を使ったほうがよいのかも。