2015年9月追記:以下のサイトは、他の方に運営を譲渡の後、現在は閉鎖されております。この記事はあくまで、2008年6月のものです。
4月にリリースした「日本語文章校正ツール」。おかげさまで色々なサイトに紹介されていまして、ブックマーク数、アクセス数も順調に伸びています。
そんな中、アクセスログを見ていて気づいたことが一つ。校正とは無関係な「JavaScript window名 文字」といったキーワードで来る方が結構いるのです。
このツール、ブックマークレット方式で、ブログの管理画面からテキストをチェック出来ます。仕組みとしては、フォームの文字情報を取得して新しいwindowをopen、ツール側でそのwindow名から原文を復元して処理するといった流れ。利用説明のページで軽~く言及しているだけなのですが、その辺りの文言が検索エンジンにうまく拾われているようです。
CGIやSSIといったサーバーサイドのスクリプトを一切使わない場合、データはGETなどURLにパラメーターを付ける方法でやりとりすることになるわけですが、POSTと違って扱える文字数がものすごく少なくなります。また、ユーザーから送られたデータがアクセスログで簡単に見れてしまうのもちょっとイヤな感じ。それを回避するための苦肉の策です。
ただ一つ問題があって、window名に使える文字はブラウザによって異なります。使えない文字が混ざってしまうとその時点でスクリプトエラーになるので、何らかの前処理をしておく必要があります。
残念ながら、どのブラウザ・バージョンだと、どの文字が使えないのかといった一覧表があるかと思いきや中々見つからず…それでも今回はCGIを使わない(転送量をケチる)ことにこだわりたかったので、自力で一応のルールを見つけました。
ひとまずIE7さえ攻略しておけば、WindowsのIEとFirefoxは大体大丈夫みたいです。別に隠すほどのことでもないので、以下、手順を簡単に。
- 全半角の数字、全半角のアルファベット、ひらがな(ぁ~ん)、全角カタカナ(ァ~ン)、第一水準漢字、第二水準漢字はどうやら大丈夫。それ以外の文字を全てURLエンコードしてしまえばOK。
- エンコードした結果、各文字のコードに付く「%」も引っかかるので、普段使わない文字に変換しておく(本ツールの場合、画数の多い漢字2文字を使用)。
- 半角記号の中にはエンコーダーをそのまま通過してしまうものがある(エンコーダーによって異なる)ので、個別に処理する。改行コードや、半角スペース、タブなどの処理もお忘れなく。
これで任意の文字列をwindow名に使えるようになります。あとは受け側で元の文字列に戻してください。
なお、ブラウザによってwindow名に使える文字数も変わってきます。Firefoxは相当多いようなのですが、IE7だとエンコード後4000字程度(多分4096文字)。エンコードされる文字の割合は意外と多いので、変換前1500~2000字程度が、この方法で一度に扱える文書サイズの限界です。
ここまで頑張ってもそんなものですし、他のOS環境、他のブラウザではまた振る舞いが違うかもしれませんが、どうしてもCGIを使えない(使いたくない)ときにはどうぞご参考下さい。