Sponsored Link

その11.ひっそり改造

EUCのはなし
小梅:
さて、新章突入っすな!
ぶら:
小梅、ちょっと聞きたいんだけど。
小梅:
なんざます?
ぶら:
小梅んとこのPET ROOMさあ、レイアウト見ようとしてソース出したら文字化けしてる。
小梅:
あ、気づいたか。
ウチEUCで書いてるもん。
ぶら:
EUC?なにそれ?
小梅:
文字コードの1つ。UNIXで使われてる。
ソースって初期設定だとメモ帳で開くでしょ。メモ帳はEUCを扱えないから、これで見ると化けるんだ。
たいていはShift-jis(以下sjis)って文字コードで書かれていて、これはメモ帳でも扱えるから化けない。
PET ROOMもsjisで書かれてる。
ジオのサイトのソース見たことない?あそこもEUCだから文字化けしてない?
ぶら:
それどころかジオの表示そのものがよく文字化けしたもんさ。
小梅:
エンコードがうまくいかないとそうなるね。
まあそれは本題じゃないんだ。なんで私がEUCにしたかっつーと。
ぶら:
つーと?
小梅:
CGIのサーバの多くがUNIXだから。
ぶら:
わかるようなわからないような。
小梅:
\でエスケープしないといけない文字化け現象が起きないというのが最大の理由。
他にもちまちまとこういうメリットが多いんだ。
CGIはEUCで書くべし、と明言してる人もいるくらい。
まあ私らシロートには判らない世界ですな。
ソース見られたくないなら、JS使うよりEUCにしちゃった方が手っ取り早いかもね。
ぶら:
小梅自身は、自分のとこのソースが見られなくて困らないの?
小梅:
ソース見るのにメモ帳使ってないもん。
このあたりの使い方はネットでそこいらじゅうに転がってます。
ぶら:
簡単にソースが見られないってのはいいかもね。
最初に教わったTera Padはその「いーゆーしー」使えるの?
小梅:
使えます。あと秀丸なんかも。
なので、ちょっとそこらへんの設定いじってる人には効果のない方法ですが、JSの右クリック禁止よりは簡単だし、反感も持たれない(かもしれない)。効果の度合いは右クリ禁止より多少効果的、かな。
私自身は別にソース見られてもいいんでそこが目的ではないんだけど…。
EUCへの変更
ぶら:
で、どーすればEUCになるの?
小梅:
えーと私も適当にやっちゃってるんでイマイチ責任とれません、念のため。
エディタによるけど、まずpet.cgiを初めとするテキストデータを保存形式でEUCを選択して保存。
これでファイルそのものがEUC形式になります。ためしにメモ帳で開いてみると化けまくり。
ぶら:
それだけ?
小梅:
いや、まだまだ。pet.cgiの中身がsjis対応で書かれてるし、CGIが作り出すHTMLもsjisのまんまだから、それを変えてやらないと。
ぶら:
pet.cgi開きまーす
小梅:
検索でjisを探してみて。
ぶら:
えーと…あったよ。
■L839charset=Shift_JISってある。
小梅:
これはCGIが作るHTMLの部分だね。
これをcharset=euc-jpに変えます。大文字でも小文字でもいいようです。
ぶら:
次は…あ、ここだ。■L1204と1205に
&jcode'convert(*name,'sjis');
&jcode'convert(*value,'sjis');
ってある。
小梅:
これは、受け取ったデータを適切な文字コード(EUCだのsjisだの)に変換する部分。
翻訳すると「EUCの文字コードで処理するから、入力された文字もEUCにしてねー」
これも
&jcode'convert(*name,'euc');
&jcode'convert(*value,'euc');
にしましょう。
ぶら:
もうjisって言葉ないよー。
小梅:
じゃ、これで終わり。
ぶら:
…ほんとに簡単だ。
小梅:
そしたら、EUC形式でFTP…まあFFFTPならEUC形式のデータは自動でEUCとしてFTPしてくれるけどね。
ただこれ、稼働中のPET ROOMを差し替えるとクッキーで保存した名前、化けるよ。 そっちはsjisで保存されてるから。
さらに忘れちゃいかんのは、petd.cgiやuser.cgiも、たとえ空データでもEUC形式にして保存してFTPしておくこと。
ぶら:
EUCならEUCで、sjisならsjisで統一しないといけないんだね。
小梅:
うん。あと、UNIXサーバじゃない人って、ごくたまにいるんだよね。
自分のところが何か、って言うのはそこの説明サイトに必ず書いてあるはずなんだけど、専門用語の羅列で判りにくいところに書いてあるところが多いと思う。はっきりと「ウチはNTサーバです」とか書いてない限りUNIXだと思うけど。
で、Windows系のサーバでこれやるとどうなるかは試したことないんでゴメン、わかんない。
ぶら:
あっ無責任。
小梅:
だって私Windows系のサーバなんてリンクラのホスティングでしか見たことないんだもーん。
ことのついでに半角カナ対策
ぶら:
プレイヤーさんが入力する名前なんかの半角カナのことだね?
小梅:
うん。なぜ掲示板などのCGIで半角カナを使うと文字化けするか、というのはネットでいろいろ書かれているから省略。
そもそも半角カナに対する賛否両論はずいぶん前からあるし、私自身混乱している部分があるから、手短に解説なんてできそうもないのよね。
あいにく「どの半角カナの組み合わせで文字化けするか」までやってらんないしー。
ぶら:
でも小梅は半角カナきらいだよね。
小梅:
文字化けとかそういうことは全部すっとばしてキライ!
ガが「カ」と「゛」の二文字になるのが許せないんだ〜ってこれはどうでもいい。
あっちゃこっちゃ調べてみて、半角カナ対策はいろいろあったけど、いちばん楽だったのが今やってる方法。
今のところ弊害はないから、実験的にやってます。
ぶら:
で、どんなふう?
小梅:
さっきの■L1204の上に
&jcode'h2z_euc(*value);
って記述するだけ。sjisのままでやるなら
$jcode'h2z_sjis(*value);
やってみたら、半角カナが見事全角に。
これ、もともとjcode.plが持ってる機能なんだって。
ぶら:
へえ。そんな使い方もできたんだー。
小梅:
この書き方、実はちょっと矛盾してるらしいんだけど、「正しい半角カナ対策」になるとまた話が入り組んでくるから、のーみそ整理するまで待ってね。
まあ、あいまいでも動くのがperlのいいところだ、というご意見もあるようですが…。
ぶら:
希望通りになるけど厳密に言うと正しくない書き方かあ。
HTMLでもあるよね。
でもこれ、見た目にはぜんぜん影響しない作業だね。
小梅:
そ。だからイベントを増やす作業なんかと違って、あんまり面白くないけどね。

PET ROOMはMissing Linkさんが配布されているCGIゲームです
[コーナートップ] [ブライト翔ぶ!] [ぶらいとふぉーらむ]