preSIMs

シムピープルのファンサイト。基本的なTIPS、改造プロセスなど。

ミニBBS -- UTF-8対応CGIスクリプト

WEBLOGのサブカラムにぴったりのチビチビBBSを作りました。
風のまにまに号様が作成されMT用テンプレートと出会ってから、そろそろ1か月。
DWで作るWEBLOGテンプレートというところにまず興味を引かれたのですが、使っているうちにMTの構造を理解するのにとてもよい素材であることに気づきました。MTを使うならお勧めです。
最近、WEBLOGシステム自体、チュートリアルや特定のテーマについて整理するには向いていないのかもしれないと思い始めています。
ちょっと調べものをしたくても、目的の記事の行き着くまでが大変だからです。エントリーの多いサイト様の場合、カテゴリーで絞ったり、検索を使っても簡単には見つけられません。
そこで、記事が少ないうちに、と全記事カテゴリー別インデックスを作るなど、いろいろ模索中です。そんな作業をしていたら、いつもの寄り道癖でJavascriptいじりに夢中になっていました。なぜ?
コメント欄があるのにミニサイズのBBSを導入される方が多いことに気づいたから。見てみるとなにやらスクロールバーが邪魔そう・・・。これ、以前作ったJAVASCRITでスクロールできるんじゃないか?
そう思い立ち、さっそく作ってみたのですが、CGIをUTF-8対応にするのに手間取りました。
ようやく、方法を決め、検証を始めました。ところがどうしてもMAC-IEで文字化けする問題は解決できません。そこでしばし暫定配布。公開することで、よいお知恵をいただけるかもしれないという下心入りです。
設置方法をあらかじめ確認したい方は、続きを読む...へ進んでください。

CGIはJoygle様が制作され、改造・再配布許可で配布されているInlinboardのスクリプトを使わせていただきました。
ミニサイズのBBSはよそさまからも優れたものが数多く配布されていますが、これはスクロールバーを非表示にし、IFLAMEをスクロールするJAVASCRIPTを付加しました。JAVASCRIPTは海外のフォーラムで多くの方から寄せられたアイデアが基になっています。

フリーです。ご自由にお使いください。サンプルはすべて書き込みOK。文字サイズ、色、デザイン等は自由にカスタマイズできます。
内容は、CGIスクリプト + 外部JS + CSS +サンプル+ Jcode.pm
設置ガイドは黒バージョンにのみ添付しましたので他の色を使われる場合も、一緒にDLしてください。
    チビィエスの特徴(拙宅で付加した部分)
  • 文字コードUTF-8のBBS=多言語対応(*1)
  • スクロールバー非表示
  • スクロールボタンにテキストか、画像を選べる
  • 150px幅まで小さくしても使用に耐える
  • 複数ページに同じBBSを設置できる
  • 各ページでデザインの一部を変更できる
  • 比較的自由にデザイン変更できる
  • 一応クロスブラウザ(*2)
(*1)システムフォントに依存するためか、UTF8への出力が不十分なためか、一部の言語で特殊文字の表示ができない不具 合があります。ギリシャ語、ハングル、ロシア語はほぼ大丈夫そう。
(*2)WIN-IE/NN7/OPERA、MAC(OS9.2)-IE5.1,NN6.1で確認。MAC-IE5では文字化けします。修正方法、鋭意研究中・・・
JAVASCRIPTはほぼ全環境で動作可能です。



MTをはじめとするWEBLOG(「ブログ」という音感が感覚的に大嫌いなので使いません)の醍醐味はトラックバックやコメントにあるのではないでしょうか。 小さな記事が、これらのシステムを使い、無限の知恵や情報に成長していく可能性を持っています。ところが、そのオープンな思想に目をつける奴がいるのですね。コメントスパマーとやらで、こんな辺境へも日に数十通のスパムが参ります。仕方なく、認証してから公開という偉そうなことをしなければなりません。そうなると気軽に書き込んでもらえるゲストブックがあるといいなぁ、と思う方は多いはず。そこで無謀にも再配布OKで公開されているCGIスクリプトをお借りし、改造を試みました。

正直なところ、 Perlはほとんど分かっていないので手探りでの改造です。
設置方法はここから>>>>

いちばん苦労したのはUTF-8への変更。あれこれ模索し、ようやく行き着いたのがこの方法です。Jcode.pmというjcode.plの後継モジュールを使いました。

Jcode.pmはMovableTypeの3以上(あやふやですが)の日本語版には標準で搭載されているようです。このページのベースもシックス アパートからDLしたMT3.1ですが、extlibフォルダの中にしっかり入っていました。

作者のグラス様がShift_JISで書かれたCGIをわざわざUTF-8に書き換えたのは、MTの各 ページに設置することを想定していたため。やはりページに埋め込むツールは同じエンコードでないと気持ちが悪い--ただそれだけの理由です。
ところがこれが難関・・・。以前、英語バージョンのサイト用にBBSをUTF-8に変換した経験はありました。そのときはよく調べもせずに、jcode.plに関わる部分を#でコメントアウトし、HTML出力部分のエンコードをutf-8にするという強引な方法 を使ったのですが、どうやらこの方法では×のよう。(現在、そのBBSはスペイン語はOK、ハングルは×)

今回、 CGIをUTF-8で書き出すためにしたことは以下の通り。
注・これはPerl4で書かれたCGIの変更です。
  • require '../jcode.pl'; → "use Jcode;"
  • &jcode'convert(*val, "sjis"); → &Jcode::convert(*val,"utf8");
  • HTMLの書き出し部のShift_JIS→UTF-8
以下はあちこちのチュートリアルに書かれていた注意事項で、検証したわけではありませんが、HTMLの書き出し部=METAタグでutf-8と小文字で書くと認識されないことがあるそうです。

これに加え、
1.コメントと名前を書き込むFORM、ログを書き出す部分のCSSにユニコードのフォントを指定。(ただし、これは両刃の刃。逆に文字化けの原因となることもある←過去の経験)
2.FORMのINPUTに文字コードUTF-8を指定→これは効果がなかったので削除。
3.すべてのドキュメントをUTF-8に変換し、保存し直す。
ところがここからがまた大変・・・。

文字コードに悩む


UTF-8のUnicodeのテキストをデータとして扱うためのフォーマットで、世界中文字が1つのセット入っている、つまり多言語を扱かえる--程度の理解しかしていませんでした。
現在、日本ならShift_JIS、欧米でならEUCでエンコードされているHPが一般的ですが、ゆくゆくはUTF-8が主流になるそうです。UTF-8の強みは、英語はもちろん、アラビア語もハングルも漢字も表示可できることにあります。つまり、ユニバーサルでグローバルというわけ(内容は別)。
ただし、表示にはユーザー側のPCにUTF-8対応フォントがなければいけません。最近はOSに付属している表示用フォントにもユニコードと名付けられたものが増えてきています。
そこで標準的なフォントか、字形グループ(serif,sans-serif)を指定しておけばいいだろうと,思ったのですが、これが大間違い。
実は完全にユニコードをサポートしているフォント自体がごくわずか。
つまり、システムフォントがなければどんな苦労も水の泡になりそうです。
フォントベンダーの大手(オーナーは元写研創設者の一人)モリサワが発表したサーバー側から表示フォントを供給するというオ ープンシステムのようなものが普及しない限り、無理なのかもしれません。よく中国語サイトなどにSIMsのDLに行くと「フォントをDLする?」とインフォされますが、これをサーバーでやったらいいんじゃん、というのがモリサワのシステムです。しかしながら、このシステム、ものすごく高価。小さな企業や個人事業主が主体のレンサバ環境で、プロバイダーが喜んで買うとは思えません・・・。

ウェブの場合、フォントはあくまでも閲覧者サイドが頼り。無理強いはできませんが、未練がましく、Arial Unicode MS、Lucida Sans Unicodeなどを指定してみました。現在、自環境では言語により表示にばらつきがあり、ロシア語、ハングルはOKで、ドイツ語、フランス語は化けるという状況です。なお、日本語についてはMAC-IE以外は一応表示できそうです。

テキストエディタにご注意


今回、一番勉強になったのはUTF-8にはUTF-8とUTF-8Nがあるということ。私、不覚にも知りませんでした。何の気なしに秀丸やTeraPad でUTF保存していたのです。ですからWINDOWSのメモ帳でもいいとばかり・・・。普段はMAC遣いのせいなので・・などと言い訳はできません。本当に無知でした。

実は、このメモ帳が失敗のもとでした。WINのメモ帳のUTF-8は”BOM”だからです。

BOMはByte Order Markの略。メモ帳でUTF-8のドキュメントを開き、保存すると、このBOMという余分なものが冒頭に勝手にくっついてしまうのです。
これに気づかず、秀丸でエディットし、ちょこっと直すのにメモ帳で開いたスクリプトをサーバーにアップしたところ、見事にサーバーエラー;;
なんと、一番大事なCGIへのパスの行頭に余分な字が加わっていたというわけです。

よくよくエディタを見れば、TeraPadでは漢字コードを選ぶところで、UTF-8かUTF-8Nを選ぶように、秀丸も保存ウィンドウでUTF8を選ぶと下に小さくにBOMにするかどうかを選ぶチェックボックスがありました。
どうぞ皆様、お気をつけください 。

UTF-8とエディタの関係についてはこちらで詳しく解説されています。
さらに
UTF-8に対応しているテキストエディタの比較はこちらで


そしてもう1つ不思議なことが---。

TeraPad というエディタでUTF8に変換し、保存した書類を秀丸で開くと、ものの見事に文字化けしてしまうのです。なぜなのでしょう??? 
何かが起きているらしいというのは分かるのですが、ちょっと追求する根性は残っていませんでした。ただ1ついえるのは、 もともとSift_Jisだったスクリプトを、TeraPad の漢字再指定読み込みでUTF8にしても、それはUTF8ではないということです。
CGIやJAVASCRIPTで、日本語が出てくる箇所は限られるので、そうたいへんではないのですが、結果から言うと、CGI中のコメント部分の日本語が最後までエラーとなり、結局、秀丸で全部書き直すことになりました。これ、コピペでシンタックスチェックをするアプリでは、補足できず、サーバーにアップしてCGIを動かして初めてエラーがでるというクワセモノでした。SAKURAエディタや、UTF8への対応で評判が高い xyzzy を使うとどうなるのでしょう?

もっと悲しいことは、これだけ試行錯誤をしてもMAC-IE5での文字化けは修正できなかったということです。MAC-NNでは文字化けしませんが、どうぞそのことを心に留め、お使いください。
文字化けしていてもMAC-IE5で書き込んだコメントはWIN、MAC-NNではちゃんと表示されます。
つまり、UTF-8で書き込まれているということなので、あとはシステムフォントの問題なのでしょうか? まだ謎です。

Posted by rui at 2005年02月02日 01:44 | コメント (2) | Clip!!

この記事に対するコメント

こんばんはruiさん。ご無沙汰しております。
ruiさんのWEBLOGに触発され、私も再々チャレンジ中です。
この記事はすごく勉強になりました。特に、文字コードとテキストエディタのお話が…。
UTF-8はMTを弄ってる時に初めて知りました…(すみません疎くて)ゆくゆくは主流になってくるコードなんですね。もっと勉強しなくては…と反省しました。
TeraPadで作成したものを秀丸で開くと文字化け…というのは、私も謎でしかたなかったんです(実際、TeraPadは使用していないのですが、使われてる方が多いので開くと必ず化けてしまって…うちの環境がいけないんだと思っていました)
まだまだ構築できてない状態ですが、BBSをDLさせていただきました。公開できるよう、頑張りますねっ。

Posted by: 朱夏 at 2005年02月02日 20:37

ありがとうございます。不完全品をDLさせてしまい申し訳ないのですが、テストしていただけると助かります。
ざっと見たところ、MAC-IEからMTにトラックバックやコメントをすると文字化けをすることが多いようですね。対処法は皆様、TEXTARIAやFORMへのCSS指定でユニコードフォントを指定するのだそうです。それから、FONT指定はトップにOsakaを置かないといけないそうです。
と、あちこちで聞きかじりしたことをすべて試してみたのですが、結論は「神話かも」--です、今のところ。
かつてのMETAタグ「美乳」神話をご存知? もしかしたら「美乳」より怪しいのではないかと疑っています。
文字コード、恐るべし。
本当は素人が他人様の作成されたCGIを改造しようなどと考えてはいけないのでしょう。でも、よそでapeBoard を自力でUTF-8にされている方がいらしたので、触発されてしまいました。やりだすと止まりまへん・・・悪い癖です。
朱夏さんのWEBLOG、待ってますよ。SAKURAはMT標準で使えてJ●●mやL●●戸のレンタルプログと違い、テンプレもプラグインも全部オリジナルでカスタマイズできますから。
PS.すんばらししい作品を送っていただきありがとうございました。感激し・・・オアズケを食った犬気分です。時間は気にせず、ゆっくりね。
お返事が遅れ申し訳ないです。あれ以来、ア××トサイトの猛攻でちょっと神経が参ってきました。こちらの打つ手を全部破ってくるのでもうその能力、よそに使え! といいたいです。ウチは+メール攻撃なので、メールをあけるのが怖くて泣いてます。

Posted by: rui at 2005年02月02日 23:14


Made with dreamweaverMade with fireworksPowered by Movable Type 3.121-ja