二〇〇三年 十月 二十五日(

旧暦 十月一日 仏滅
癸未年 十月初一日

MT 日本語を数値文字参照へ変換するフィルタ

先日つくった和風日付表示プラグインで、漢字のところが文字化けしてしまうという連絡を頂いた。
これに関しては、原因はさっぱり分からないのだけど(^_^;)、漢字部分を数値文字参照(〹とかいう感じ)で書き表せばいいかもしれないと思い、そういうフィルタを考えてみた。

アーカイブにするほどエラそうなものでもなし、処理についてももっと巧いやり方があるはずだと思うので、スクリプトを貼り付けておくことにする。
こうじゃないでしょ!ってツッコミがあったら、コメントに思いっきり書いてやってください。
(ってか、文字コードの扱いとか苦手なので、ツッコんでもらいたかったりします。)

global filter なので、to_ncr="1" とタグの中に書き加えて使います。

# 文字を数値文字参照(NCR)に変換するフィルタ

# 要Jcode.pm

package MT::Plugin::Toncrj;

use MT::Template::Context;
use Jcode;

MT::Template::Context->add_global_filter(to_ncr => sub {
my($str, $ncr, $ctx) = @_;
if($ncr eq '1'){
Jcode::convert(\$str,'ucs2');
my @out = unpack("C*",$str);
my $output='';
my $i;
for($i=0;$i<$#out;$i=$i+2){
$output.='&#'.($out[$i]*256 + $out[$i+1]).';';
}
return $output;
}
return $str;
});

1;

でも、よく考えてみたら、文字化けの場合、プラグインから文字列が返った時点で文字化けているわけで、それをフィルタリングしても意味無い気もしてきた・・・(^_^;)。

というわけで、日付表示プラグインのほうにはプラグイン自体に文字参照を返すような機能をつけたのだが・・・。

Posted by mura at 2003年10月25日 18:19 | トラックバック
コメント
コメントする









名前、アドレスを登録しますか?






トラックバック
このエントリのトラックバックURL

http://www.villagewood.net/mt/mt-tb.cgi/45

◇このサイトのサーバの調子によって、トラックバックを送信してもエラーが表示されたり、すぐにこのページに反映できないときがあります。ですが、トラックバック自体は送られていますので、重ねて送っていただかなくても大丈夫です。こちらでも出来るだけ早く反映できるようにrebuildしますので、ご容赦ください。
参照元URL
関連エントリ