なんかTCUPって化けやすくない?
ごもっともです。修復したいURLを入れて「修復!」を押してください。
HTML中で、< > は直接は書けず、< > と書くことになっています。その時の処理が甘いようです。
例文 | 久々だと文字化けだぜ・・・ | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
文字単位 | 久 | 々 | だ | と | 文 | 字 | 化 | け | だ | ぜ | ・ | ・ | ・ | ||
JISコード | ESC $B | 5W | !9 | $@ | $H | J8 | ;z | 2= | $1 | $@ | $< | !& | !& | !& | ESC (B |
間違った実体参照 | ESC $B | 5W | !9 | $@ | $H | J8 | ;z | 2= | $1 | $@ | $ < | !& | !& | !& | ESC (B |
TCUPは、受け取った文字列を実体参照するとき、 誤ってJISコード文字列中の < > も変換してしまうようです。
間違ったJISコード | ESC $B | 5W | !9 | $@ | $H | J8 | ;z | 2= | $1 | $@ | $& | lt | ;! | &! | &! | & | ESC (B |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
間違った文字単位 | 久 | 々 | だ | と | 文 | 字 | 化 | け | だ | う | 踉 | 察 | Α | Α | ・ | ||
文字化けした例 | 久々だと文字化けだう踉察ΑΑ・ |
なので、これを逆方向に変換すれば、もとの文章が修復できるというわけです。
ところが、この時、JISで表現されていた文字列が奇数個になった場合、どうなるかわかりません。
試行錯誤でやってみた結果がこのコード片です。
(試行錯誤でこれだけかよ!というご意見はもっともですが、とりあえずこれで治る気がします)
2003/08/04追記:
奇数だったら、最後の1文字を無視するように変更しました。
かんがえてみりゃ当たり前じゃん。
$jis =~ s/.(\e\(B)/${1}/;
このページで使っている修復cgiもダウンロードできます。
このページは、ニュース記事をもとに試行錯誤で作っているものです。 もし、これでも修復できないパターンがあれば、(消えないうちに)そのURLを教えてください。