なんか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を教えてください。