|
CGI 作成の初歩 |
|
15. フォーム入力からファイルの書き出しまでを行う |

フォームからの送信で日本語のような 2バイト文字を送信した場合、
%を含む意味不明な文字列になって送信されるのをご存知でしょうか?
これはURLエンコードと言い、特殊記号や日本語などの文字列も正しく
送信する為に行われており、実際に表示やファイルに書き出す場合、
これらを元に戻してやる必要があります。
例えばフォームから受け取ったデータが $formin という変数に入っていた場合は、受け取った後
の処理に次のソースを加えて下さい。

URLエンコードされたデータで半角スペースは + 記号に、2バイト文字は %16進数値
といった
形にエンコードされていますので、%〜 の部分を hex関数で10進に、pack関数でそれらを1文字
のコードとして扱い、置き換えるなどの作業を全ての文字に対して行いますが、説明が難しい
ので、ここでは省かせて頂きます。
興味がある方は、それぞれの関数がどのような働きか調べた後、URLエンコードについて検索
してみると理解が深まると思います。

URLエンコードが出来た所で、フォームの受け取り〜書き込みを行ってみます。
今回は下のようなフォームで、お名前 と E-mail を受け取り、それを test.txt
に
書き出す処理を行ってみます。
|
お名前のフォーム欄の name は name
E-mailのフォーム欄の name は mail
送信メソッドは POST
送信先は test.cgi
|
下のソースでは既存ファイル test.txt を読み込んで配列に入れ、フォームから受け取ったデータ
をその配列に追記、保存する手順で行っています。
配列へは先頭行へ追記を行いますので、フォームから送信する度に、ファイルの最上部へ
新しいデータが記録されていきます。

ソース内に、どのような処理を行っているかをコメントとして書き込んでありますので、
それと比較しながら、どのような順序で何を行っているのかを把握しましょう。
|
次項ではサブルーチンを使って、処理をグループにする方法を説明します。 |
 |
|
|
|