CGIのソースとUTF-8の使用

ここでの問題は、Perl/CGIのソースファイル(*.cgi)の文字コードをUTF-8で記述することができるかどうか、である。
LOG
218.228.192.228 [30/Aug/2017:23:39:24] perl utf8 コードでソース記述
単にソース(*.cgi)の文字コードを変更するだけなら簡単である。その手順は以下のようになる。ただし、それが現実に実行できるかどうかは別問題である(末尾参照)。
  1. ソースファイルをUTF-8に変換して保存する。

  2. Perl/CGIの出力結果の「charset」の部分の文字コードを「UTF-8」にする。下記の2ヶ所ある。
    CGIとしての出力部分。「print "Content-type: text/html; charset=utf-8\n\n";」
    HTMLとしての出力部分。「<meta charset="utf-8">」。これはHTML5形式。

    SAMPLE
    # 実行結果の画面表示(HTML5形式)
    print "Content-type:text/html;charset=utf-8\n\n";
    
    <!doctype html>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    <meta name="robots" content="noindex,nofollow">
    

  3. ただし、これを実質的に動作させようとすればJcode.pmを使う必要がある。jcode.plではこの変換はできない。
    検索スクリプトなどでは外部から受け取った文字を内部でUTF-8に変更する必要があるからである。
    すなわち、この場合にはプログラム内部で文字コードをすべてUTF-8に統一して検索や置換をする必要があるからである(ソースで使っている文字コードに合わせる)。

実用性

さて、このようにしてUTF-8で記述したPerl/CGIはローカルのWindowsでは使える(次項参照)。
しかし、これは現在のサーバーの主流をなすUNIX系のWEBサーバーでは動作しない。そこでは文字コードはEUC-JPしか使えないからである。
このサイトに限っていえば、こういうことはムダだった、WEBでの実用性は皆無だったということになる(笑)。したがって、これらUTF-8で書いたソースも出番はなくお蔵入りということになる。

下記の「篠崎愛」は入力例である(placeholder)。そのままでは検索できない。テキストボックスにはこれを実際に入力する必要がある。IE Ver.11, Edge Ver.86, スマホとも実行できる。

 

このプログラムはEUC-JPで記述しているが、UTF-8*.html内からUTF-8で書かれた*.htmlファイルを検索するものである。
ちなみに、この場合はプログラム内部で文字コードをすべてEUC-JPに統一して検索や置換をすることになる(ソースで使っている文字コードに合わせる)。


UTF-8でのCGIスクリプト

UTF-8でもCGIのプログラムを書くことができる。その例である。
実行は現在のところローカルでの実行に限られる。WEBでの実用性はない。ローカルでApacheを起動しておいてから実行することになる。

ファイル検索
UTF-8で記述した列挙型ファイル検索プログラム(u8_seek.cgi)の実行である。
これはUTF-8で記述したHTML(このファイルのこと)から呼び出しているが、入力パラメータや対象ファイルがShift_JISであってもUTF-8であってもどちらでもよい。

POST方式
library内のbookフォルダ内から「夏目漱石」という語をPOST方式で検索する例。
 

GET方式
databox内のvbaフォルダ内から「バイナリ」という語をGET方式で検索する例。
参考
%A5%D0%A5%A4%A5%CA%A5%EA/実行できる
この16進文字列はShift_JISであるが、プログラム内でUTF-8に変換しているのである。
IE Ver.11のGET方式では「バイナリ」というナマの日本語は渡せない。POSTの場合はブラウザが自動的にURLエンコード(16進文字列化)しているわけである。

連番ファイル作成
UTF-8で記述したUTF-8の連番ファイル一括大量作成プログラム(make_utf8_by_u8.cgi)の実行である。
参考
make_utf8_by_u8.cgi/BOM付きのUTF-8で連番ファイルの大量作成(ソースもUTF-8)

ソースをUTF-8にしても作成されるUTF-8ファイルにBOMは自動的には付かない。BOMを付加する場合はそのルーチンを追加する。このプログラムではそれを付加している(不要な場合はその部分をコメントにすればよい)。


その他のUTF-8での試作例

上の「make_utf8_by_u8.cgi」によく似たものに「make_utf8_by_euc.cgi」がある。
このmake_utf8_by_euc.cgiはBOM付きでUTF-8の連番ファイルを大量作成するものである。
そのソースはEUC-JPで記述している。普通はこちらを使えば十分であろう。これはWEBサーバーでも当然実行できる。
また、Windows 8.*/10のような改悪退化システムではこちらの方が編集や操作がはるかに簡単なのである(私の場合は)。

- 2013/07/08 -


タコの殿堂
UTF-8という語があればエクセルバカが飛んでくる。バカが見てナニすんのというようなものね。