CGI活用講座第5回、CGIテスト編(3)です。
CGI活用講座、第5回は、テスト編です。
CGIはHTMLの知識が無いと、扱えない物と思ってください、HTMLをPerlで記述すると思っていただいて良いと思います。
使用ソフトは、TeraPadとFFFTPのみ、
その他、必要な物は、CGI&Perlが使えるサーバーですね。
出来れば、自宅にサーバ環境を構築して、Perlをインストールし、ローカルでテスト出来る環境が望ましい。
では、CGI活用講座第5回の開始です。
今回も、前回同様に、
Download出来る様にしておきます、教材DownLoad です」
ダウンロードした教材は、アップロード用です、基礎講座を参考に、Perlのパスをサーバにあわせてください。
ファイル名「katuyou5.html」
少ししつこいかも知れませんが大事な部分なのでもう一度同じ素材です。
今回は、HTMLのヘッダーとフッターを付けて見ました。
実際には、つけなくてもブラウザが適当に尽かしてくれるんですが。
前回との違いは、7行目と12行目のCGIファイル名が変わっただけです。
実行結果です、
仮のデータを入力して、変換過程を表示出来る様にしてあります。
この実行結果を見ながらの説明をします。
最初の入力はの部分は、入力は [ name=%B0%AA+Yuki&sex=%C3%CB ]
CGIの、10行又は、13行で$bufferに取り込んだデータです。
if文で、POSTなのかGETなのか転送方法により取り込み方法を切り変えてます。
CGIの、18行目、@pairs = split(/&/,$buffer);
入力は [ name=%B0%AA+Yuki&sex=%C3%CB ]でしたから、(/&/)、&で切り分けて、@pairsに代入 >
@pairsは配列変数ですから、イメージは、
@pairs=[ {name=%B0%AA+Yuki}、{sex=%C3%CB} ]
ファイル名「katuyou5.cgi」
CGIの20行目、foreact $pair (@pairs) {
配列 @pairs から 1データを取り出し、再度切り分けます。
23行目、($name, $value) = split(/=/, $pair);
(/=/)、&で切り分けて、$nameと$valueに代入
最初のデータは、{name=%B0%AA+Yuki}でしたから、
$name="name"、$value="%B0%AA+Yuki"になりますね。
27行目は、$value =? tr/+/ /;
(=?)は、パターンマッチと表現しましょうか。
(tr/+/ /)は置き換え、(+)があったら( )半角スペースに置き換えです。
つまり、$valueの中から、(+)を探して( )に置き換えるわけです。
$value="%B0%AA Yuki"に変わります。
31行目も、$value =? s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
パターンマッチを使いますが、3文字、(%)+16進数の文字が2つの意味です。
見付かったら、16進数の2桁の文字列に変換するんですが、/eg、最後まで全部変換します。
この部分は、おいおい理解できて来るでしょう。
イメージとしては、$value={#b0aa yuki}、でしょうか、
37行目、$code = &jcode::getcode(?$value);
$valueの#b0aaの部分の日本語コードを調べます。
構文は、Perl5の物、36行目の構文も使えます。
42行目、$jcode::convert(?$value,,"euc");
$valueの日本語コードを"euc"に変換します。
構文は、Perl5の物、41行目の構文も使えます。
日本語文字コードは、以下のサイトで調べる事が出来ます。
http://charset.7jp.net/
ちなみに、”葵”のeucコードを調べると、”b0aa”になってました。
文字列の切り分けと置き換えで、日本語を復活させる方法、結構面倒ですが、いつも同じ構文ですから、必要な要素を順次追加すれば、汎用化も可能でしょう。
構文は言語により決まる物なので、それに従うしかないのですが、Perlの場合構文さえ間違えなければ、余り制約が無い、結構使いやすい言語です。
CGI活用講座、第5回を終了します。
|