師匠の散歩

きままにPerlでも

decode

CGIモジュールのデコード/ subDecode.cgi

本来、デコードの仕組みを勉強するはずだったが、CGIモジュールを使えば、いわゆるデコードは完了しているようなので勉強はあとまわしにする。ここでは、CGIモジュールがどこまでやっているのか確認してみた。

実行ボタンを押すと、受け取ったハッシュデータを表示する。Header::readparseOld() を使用。

Method = GET とする場合は、アドレス欄の最後に、?名前=内容を入れてリターンしてください。Windowsからだと、文字コードShift_JISで文字列が渡されます。

  1. method = post
  2. 文字コード:EUC-JP
  3. Code
  4. Input
  5. 入力
  my $n   = keys( %in );                  # ハッシュの要素数を取り込む
  my @key = keys( %in );                  # ハッシュのキーを取得する
  @key = sort (@key) ; 
  for (my $i=0;$i<$n;$i++){
    jcode(@key[$i])->h2z->euc;
    jcode($in{@key[$i]})->h2z->euc;
  }

CGIモジュールまとめ

  1. method=post で、name="" 入力="" で実行した場合、key 内容 とも""となる
  2. method=get で、イコールを使わずに内容を記載した場合、key はkeywordが入る
  3. method=post で、日本語を入れると、contentsには日本語がそのまま文字化けせずに表示される
  4. windowsで アドレス欄で?のあと日本語を入れる(method=get)と、key,contentsともShift_JISが入力される
  5. 文字コード変換すると、文字化けを解消できる
  6. <と>はそのまま渡される=<a href="http://hoge.jp">ほげ</a> という記入ができる
  7. タグそのものは表示されないので、内容つなぎで<>を使うと表示されない(ソースには記載あり)ので注意
  8. 掲示板などと同じく、<を表示させる場合は「&lt;」と書くこと
  9. タグを書くと、表示ページのCSSが継承されてる
  10. Shift_JISやUTF-8NのページからPOSTされたものは、ECUに変換すれば文字化けは解消される
# --------------------------------------------------------------
# フォームデータを読み出し、ハッシュに格納して戻す
# use CGI; 必須
# --------------------------------------------------------------
sub readParse {
  my %hash = ();                        # グローバル変数は用いない
  $CGI::POST_MAX = 1024 * 100;          # 最大読み込みするデータ量、new CGI();より前に置く
  my $form = new CGI();                 # インスタンス化
  my @query = $form->param();           # FORMデータを取り出す
  if ( @query eq "") {                  # データが無ければ、連想配列を空白のまま戻す
    return %hash;
  }
  my ($key,$contents,$data);
  foreach (@query){                     # パラメータ全てについて
    $key = jcode($_)->h2z->euc;         # keyの文字コードをEUC-JPに変換
    $data = $form->param("$_");         # 内容を取り出す
    $contents = jcode($data)->h2z->euc; # 内容の文字コードをEUC-JPに変換
    $hash{"$key"} = $contents           # hash を作成
  }
  return %hash;                         # 受け手側へ、my または our ハッシュを渡す
}

subDecode.cgi // Topに戻る // indexに戻る
Copyright(C) 2009-2021 Grandmaster Last up : 2020/09/18