Version 1.2を公開しました。
・MT4i/MovableType用 携帯電話向け変換プログラム
今回の変更点
- バイト数制限時、バイト数を正しくカウントしない不具合の対策
- ハイパーリンクのURLをGoogleのchtmltrans経由へ変換する機能の追加
既知の不具合
- 不具合ではないが、外部サイトだけではなく自サイト内記事へのハイパーリンクもGoogleのchtmltrans経由に変換してしまう。MT4i経由としたいが、今のところ対策予定なし。
- <追記>バイト数制限機能にてページ分けされた際、blockquoteタグ、pタグ、ulタグなどが閉じられる前でぶった切られる場合がある(要するにタグが閉じられない場合があるってこと)。
夏休み前には出来上がってたんですけど、公開するのが遅くなってしまいました。
バイト数カウントの不具合ですけど、これが非常に厄介でした。MT4iは、内部でUTF-8の文字列もすべて一度EUC-JPに変換してから各処理を行っているんですが、Perlの文字列関数であるsubstr()やlength()は、EUC-JPに対して使用すると色々と不都合なことがあったんです。
まず、EUC-JPにおける半角カナは、何故か2バイトのコードを持っていること。また、特殊な3バイトのコードを持つ文字が存在すること。この為、EUC-JPの文字列に対してsubstr()やlength()を実行すると、半角カナは2バイト、特殊文字は3バイトに換算した結果が返ってきます。まぁ、正しいんですけど。
ただ、最終的にはShift_JISに変換する為、半角カナは1バイト、特殊文字は2バイトとして計算して頂きたい。っちゅうことで、文字列中に含まれるそれぞれの文字数をカウントし、引き算してあげるという面倒なことをわざわざやっています。
無論、すべて僕一人でやったわけではなく、ネット上に公開されている情報を参考に(むしろパクって)仕上げました。Perlや文字コードに詳しい人なら常識なんでしょうけど、ド素人の僕はえらい苦労させられましたわ。
あと、chtmltrans経由への変換についても、うまくURL部分だけ抜き出せなくて苦労しました。正規表現使って置換かけるわけですけど、なんかもう、どうにもこうにも。これも、ネット上に公開されている情報を参考に、なんとかかんとか動くようになりました。
というわけで、欲しがる方は非常に少ないであろうこのMT4i、使いたい人は使ってみてくださいな。
そうそう、現在、mt.cfgの内容を読み取ってMTのObjectDriver使ってDBへ接続するテストを行っています。MySQLへの対応も、これで何とかなる、かも?
ゲスト
$html =~ s/[Aa][Bb][Cc]/xyz/;
置換コマンドでは次のような使い方もできます。
$html =~ s/abc/xyz/i;
管理人
ご指摘ありがとうございます。>ゲストさん
iオプションの存在は調べて知っていたんですけど、一度試して何故かうまく動かなかった為、放置していました。
今試してみたら、ちゃんと動くようです。
次期バージョンに反映したいと思います。