このエントリは内容が古いです。
最新の日本語化パッチを使用するか、こちらのエントリを参考にしてください。
日本語化パッチを適用した人は、こちらの文字化け対策を行う必要はありません。
TrackBackの文字化けを解消していい気になっていたら、どこかのサイトでBookmarkletでも文字化けが発生することを知る。
今までその存在を知らなかったBookmarkletですが、ようやくその姿が明らかになったので、ついでにそちらも強引に解決しちゃいます。
どこをいじったらいいかはGoing My Way: Movabletype Bookmarkletを使った記事の引用にヒントがあったので簡単にわかりました。
kengoさんありがとうございます。
ということで、修正点。
- mt.cgiが存在する場所から見て、
./lib/MT/App/CMS.pmを開きます。
- 最新の2.51だと584行目から590行目を以下のように書き換えます。
if ($q->param('is_bm')) {
require Jcode;
$param{selected_text} = $param{text};
$param{text} = sprintf qq(<a title="%s" href="%s">%s</a>\n\n%s),
Jcode->new(scalar $q->param('link_title'))->euc,
Jcode->new(scalar $q->param('link_href'))->euc,
Jcode->new(scalar $q->param('link_title'))->euc,
Jcode->new($param{text})->euc;
なお、
qq(<a title="%s" href="%s">%s</a>\n\n%s)
の部分をいじると、自動挿入されるタグも変更できていい感じです。
ワタシは
qq(<blockquote><div class="quotetitle"><a title="%s" href="%s" target="_blank">%s</a></div>%s</blockquote>)
とやりました。
kengo
milanoさんありがとうございます。
今日一日でかなり進んだ気がします。
Trackbackの文字化けが解消したかと思うと
もう新しくBookmarkletの文字化けの解消までアップされている。とても頼りになりました。
他の人はTrackbackの対応らしく
まだこちらの記事にはコメントが付いていませんね。
これからどんどん賞賛のコメントが続くでしょう。
それではまた。
太鉄
TrackBackに引き続き、Bookmarkletまで!!ありがとうございます。
右クリックして「MT It!」した後、文字化けした部分をわざわざ書き換えていたあの辛い日々は一体なんだったんだろうという感じです。これで、友人にも堂々とMovable Typeをすすめることができます。
ホントにありがとうございました!!
miyagawa
どうも、このURLには %uNNNN という感じでとんできているので、CGI.pm でデコードしたときにはUTF8になっています。というわけで運が悪いと Jcode.pm で変換に失敗することもありそう。
Jcode->new(scalar $q->param('link_title'), 'utf8')->euc,
みたいにしたほうがよさそうです。
milano
↑のmiyagawa氏のサイトにも載っていますが、mod_perlでMovableTypeを動かしていると、CGI.pmではなくApache::Request.pmによりデコードされてしまうので、BOokmarkletを使ったときに使用される%uNNNNという形式のアンエスケープがされず、文字化けするとかそういう事以前にタイトルとか選択しておいたテキストとかが日本語にならないという問題が発生するようです。
対策は、、、ワタシにはわかりません。
太鉄
う~ん、どうも動きがおかしいみたいです。
Bookmarkletを開いた際、ログイン処理を経由(クッキーが残っていない)すると文字化け、しない(クッキーが残っている)と正常表示、となります。
まぁ、ダミーでBookmarkletのウィンドウを一つ開いておけば良いだけなのですが。
同じような現象に出会った方はいらっしゃいますでしょうか。
ちなみに、IEのバージョンは6.0.2800.1106、SP1、Q328970、です。
milano
あー、気づかれてしまいましたか。
ログインしてなかった場合はログインしてからもう一度Bookmarkletを使えば問題ないのですが、それも面倒ですからね。
どうしても修正したいと言う方は以下の手順で修正してください。
10行目あたり
use Symbol;
の次の行に
use Jcode;
208行目あたり
$param->{text} = $q->param('text');
$param->{link_title} = $q->param('link_title');
$param->{link_href} = $q->param('link_href');
↓
$param->{text} = Jcode->new($q->param('text'))->euc;
$param->{link_title} = Jcode->new($q->param('link_title'))->euc;
$param->{link_href} = Jcode->new($q->param('link_href'))->euc;
最初に修正したところ、
require Jcode;
を削除
同じく最初に修正したところ、
Jcode->new(~,'utf8')->euc
と、utf8を入れていた場合はそれを削除
入れていなかった場合は別に問題なし
太鉄
>あー、気づかれてしまいましたか。
気付いてしまいました。(^_^;
何か、対策を催促してしまったみたいで申し訳ないです。
早速適用、無事にログインしていなくとも文字化けしなくなりました。
ありがとうございました!!
jujube
初心者です。すみません。
UTF-8 の場合は、euc の部分を utf8 にすればいいのでしょうか?あるいは utf-8 なのでしょうか。
お手数ですが教えてください。
milano
UTF-8でサイトを作っている人は、Bookmarkletについては何も変更しなくて良いのかもしれません。
何も変更しない状態で、Bookmarkletを試してみてください。それで文字化けしてしまうなら、
Jcode->new($q->param('link_title'))->utf8;
と、eucの部分をutf8に変更してください。
他にわからないことがあったらお気軽にどうぞ。
jujube
お返事を待たずにutf8で変更してしまっており (^_^;おい
特に問題なさそうなのでそのままにしておきます。
どうもありがとうございました。
jujube
ちょっと変だったので、元に戻しておきました。
でちゃんと動いております。
ありがとうございました。
Hanabusa
【Posted by: milano on 2002年11月29日 11:18】の
書き込みのmod_perlでのBookmarklet文字化け
対策ですけど、既に解決済みでしたらすみません。
一応,自分は下記のようにして日本語対応できました。
1)CGI.pmをCPANでバージョンアップ
2)lib/MT/App/CMS.pmを編集
397行目の
my $q = $app->{query};
を
my $q = CGI->new;
に変更したら動きました。
でも,何か他の不具合おきても責任もてません。。。
milano
>Hanabusaくん
Apache::Request を使うのやめるワケね。
いいんではないでしょうか。
Hanabusa
>みらのさん
コンバンワ。
↑の自分のやり方だとまずかったです。
ログイン前だと、エラります。
#ログイン後は直でGETだからいいけど、ログイン前はPOSTでくるから、Apache.pmに標準入力をとられてCGI.pmにリクエストこない。。。
ということでやり方を変更して,Apache.pmでデコードがうまくいかないのは仕方ないとして,
CGI::Cookieさんが%uNNNN形式のURLデコードも
やってくれるので、そっちに変更しました。
具体的にはCGI::CookieとJcodeをuseして,
584行目あたりにある
$param{text} = sprintf qq(<a title="%s" href="%s">%s</a>\n\n%s),
と
scalar $q->param('link_title'),
の間に以下のコードを挿入。
map {
my $value = CGI::Cookie->parse('foo='. $_)->{foo}->value;
jcode($value, 'utf8')->euc;
}
たびたび,汚い書込みしてしまいましてすみません。m(_ _)m
milano
もうそこまでくると良いのかどうかわけわからんなぁ。
Yoshiki
すげぇー。
なにをかくそう、ぼくも mod_perl環境で使ってたのですが、
この bookmarklet の問題が、どうやっても直りませんでした…。
Javascript のお勉強をして、%uNNNN が unicode で、それを
Javascript で unescape すればいいことはわかったのですが、
それを perl でどうすればいいか悩んでおりました…。
CGI::Cookieさんってエラい!
と思ったんですが、CGI::Cookieは、CGI::unescapeを読んでるみたい。
なので、
584行目あたりにある
$param{text} = sprintf qq(<a title="%s" href="%s">%s</a>\n\n%s),
と
scalar $q->param('link_title'),
の間に以下のコードを挿入。
map { jcode(CGI::unescape($_), 'utf8')->euc }
これでいけました。
Hanabusa
>milano
正しいのはlibapreqの修正パッチをメンテなに送る行動なのですが、当方は「じつりき」と「えいごどっかいりょく」の両方を持ってなかったので刹那的に現実逃避しました。
>Yoshiki
ぐぐっ!!
俺,InternetMagagineにおこぼれで載るの密かに期待してたけど,詰めが甘かったので,Yoshikiさんに譲ります。
yazawa
練習中に無意味なTrackBackしてしまいました。
恐れ入りますが削除お願い致します。
Rick Cogley
I was going to implement your hack, but it seems like I don't need to. I have MT 2.64 running utf8, and I don't have any trouble with trackback mojibake.
変な日本語で、すみません。Hackをつけようと思ったが、どうも必要ないみたいですね。MT2.64で、UTF8でやっていますが、Trackback文字化けが現れていない。
I am not a perl expert, but in 2.64, was there some change made that fixes this?
PerlのExpertなんかじゃないが、2.64でこれひょっとしてなおっている?
Note that I DID have trouble with mail, and implemented the jcode hacks for that. Now, mail from MT supports kanji just fine.
そうはいっても、2.64でメールが化けていたのでJCODEハックつけたら、直った。
いろいろ役に立つAdvice有難うございます。
Rick Cogley
しつれい。Trackback文字化けではなく、Bookmarklet文字化けです。
otemoto-ya
初心者です。
Bookmarklet文字化けどうやって直したらいいかかいもく見当もつかなかったのですが、こちらにたどり着けて助かりました。文字化けしないととっても便利に使えてうれしい!
ありがとうございました。
pannya
MTの2.64をeucで動かしています。上記を参考にしてもBookmarklet文字化けが直らずに(スクリプトのエラーなどもでて)困ってましたがYoshikiさんのコメントを参考に
./lib/MT/App/CMS.pm の
map { Jcode->new(CGI::unescape($_))->$charset() }
を
map { Jcode->new(CGI::unescape($_))->euc }
と一行書き換えるだけで、よくわからないけど文字化け解消!! 感謝です。