&の&への変換。

投稿アップデート情報  追記(7/19)  ……  追記3(7/20)  追記4(8/14)  追記5(2014/2/24)

 この間うち,シバケンさんとこの「シバケンの掲示板」で,「ひえの文字」という話があった。たまたま覗きに行ってたので,なんでだろうと思った。

 通常のひえは「稗」だが,くさかんむりのついた「薭」てのがあって,これが実体参照で「薭」ってやっても出ないという話だった。今どきのブラウザやOSで,そんなのありかなぁと思ったんだが,FHさんの「FHの掲示板」でも同じことが起こっていた。そういえば,TODOSで「惊奇日本」と書こうとしたときも「惊奇日本」になっちゃったよなあと思いだした。

 で,FHさんとこの掲示板は,KENTさんとこの「Joyful Note」だってことを知っていたので,これをダウンロードしてちょっと調べてみた。TODOSで使っている「WEB PATIO」はスレッド型で少し複雑なので,前にテスト設置したときに前もっての設定とかが面倒だった記憶があるので,「Joyful Note」を調べることにしたわけだ。

 「Perlのお勉強」も飽いちゃって,あのまま放置プレイだが,それでも,高々,6回しかやっていないこれが少し役に立ったね(爆)。joyful.zip を展開してできるinit.cgiにこういう部分があった。これの13行目で,問答無用で「s/&/&/g;」をやってるから,「薭」の頭の&が&になってしまって,実体参照が効かなくなるわけだ。

 じゃ,この行(つまり,13行目)をコメントアウトしてしまえばいいじゃないかというカスタマイズは,すぐに思いついた。が,割とちゃんとした掲示板の作り手のみんながみんな「& → &」ってことは,セキュリティでまずいからだろう。しかし,まずさの度合いが大したことなければ,目をつぶっちゃおうかと思ってググってみたが,あまりにも,常識なのか,どうまずいのかを教えてくれるところはなかなかなかった。そんな中で,なるほどと思ったのが,「【PHP関連】「&」(アンパサンド)をエスケープしなければならない実例」という記事。やはり,13行目を,問答無用でコメントアウトするのは,大変,まずいようだ。

 ということになれば,次に思いつくのは,&に続く文字の条件分岐で処理を分けてやろうということだ。しかし,Perlに疎い悲しさ,どうやったらいいかわからない。投げちゃおうかと思ったころに,運よく発見したのが,「&の実体参照への変換」。どんぴしゃり,やりたいことをやったサンプルスクリプトを置いてくださっていた。これを参考に(いや,流用して),init.cgiのフォームデコードの部分をこういうふうに書き換えた。

 で,実体参照に関係ない「&」はちゃんと「&」になり,実体参照はちゃんと実体が表示される「o6asanの掲示板Shift-Jis版」ができた。このテストのために作った「o6asanの掲示板」だが,これは自鯖上にはないから,このまま残しておいて,自鯖が落ちているときの連絡用として使うのも手だなと考えているところである。

追記(7/19):
 後知恵だが,ちゃんと表示されないのは「’JIS’ 補助漢字」なんだから,初めからUTF-8で行けばいいんじゃないのというわけで,「Joyful Note」のスクリプトをUTF-8デフォで作りなおしてみた。Perlがよくわかっていない私だが,これは割と簡単だった。
 Jcode::convert に関係あるcgi ファイル上の 12カ所の sjis を utf8 に書き換え。
 admin.cgi,check.cgi と tmpl 内の html 上の charset=shift_jis を charset=UTF-8 に書き換え。
 *.cgi,*.html,*.datをUTF-8エンコードで保存し直す。

 init.cgiの内容の書き換えは全くしないで,こんなことで,UTF-8デフォのJoyful Noteができた。 —>> ここにおいてます。

追記2(7/20):
 EUC-JPでも確認してみた。init.cgiを変更しなければ,「補助漢字」は表示されなかった。当たり前だが,
 Jcode::convert に関係あるcgi ファイル上の 12カ所の sjis を euc に書き換え。
 admin.cgi,check.cgi と tmpl 内の html 上の charset=shift_jis を charset=EUC-JP に書き換え。
 *.cgi,*.html,*.datをEUCエンコードで保存し直す。
の必要もある。EUC-JPデフォのJoyful Noteは ここにおいてます。

追記3(7/20):
 稼働中掲示板への対処だが,UTF-8に文字コードを直すのは大変で,現実的ではないと思う。

 init.cgiの差し替え方式なら,レンタル掲示板の場合であっても,管理会社の担当者がその気になってくれれば,「補助漢字」を表示させるのは可能だと思う。init.cgiを上書きアップロードすれば,上書き後に投稿される記事に限り,「補助漢字」が普通に表示されるようになり,そこまでに書き込まれていた掲示板の記事は影響を受けない。

 万が一,こちらのカスタマイズを利用される方がいるといけないので,大事なお約束事項を(爆)。
 お約束===この記事のカスタマイズを利用される方は,あくまでも自己責任でお願いいたします。

追記4(8/14):
 掲示板を整理した。で,もし落として違いを試してみようと思う方がいらっしゃったら,こちらへどうぞ。

追記5(2014.2.24):
 ドメインを移管したので, XREA においてあったものは,なくなった。