URLデコード処理

Perl初心者のためのPerlノートです!

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

◆ はじめに

本ページは、私がPerlを習得した時(いや習得中)のノートです。

ごく普通の言語(COBOL,C,Java,VB等)を知っている人が、Perlをやり始めるといろいろと悩むことがあります。

それは、

です。

本ページは、そのようなハードルを一つ一つクリアにしていけたらと思います。

そして、本ページが何かのお役に立てれば幸いです。では、ごゆっくりご覧ください。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

◆ サイト最新情報

◆ コンテンツ

■ URLデコード処理

URLデコード処理とは、CGIで標準入力からHTMLフォームデータを読み込む時の定石の処理です。

    @pairs = split(/&/,$buffer);
    foreach $pair (@pairs) {
        ($name, $value) = split(/=/, $pair);
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $FORM{$name} = $value;
    }

$buffer変数内では、『要素名1=データ1&要素名2=データ2&..要素名N=データN』のデータ並びを想定します。

これは、CGIでHTMLのフォームデータを標準入力から読み込んだデータ並びです。

これを、『&』デリミタでsplitし、『要素名=データ』毎の配列『@pairs』を作成し、

つぎに、『@pairs』の配列数分foreachし、『@pairs』の要素を、『=』デリミタでsplitし、要素名とデータを取得します。

尚、データは、URLエンコードされています。

「URLエンコード」とは

A〜Z、a〜z、0〜9、* - . @ _ はそのまま。

半角スペースは + に変換。

その他はすべて % に16進の2桁の文字コード。

たとえば、「あ」0x2422なら %24%22になります。

今回は、デコードなので上記の反対を行います。

『$value =~ tr/+/ /;』は、『+』を半角スペースに戻します。

trは、変換演算子といい、置換演算子のsと違い正規表現は使えません。

『%([a-fA-F0-9][a-fA-F0-9])』は、漢字等のエンコード状態で、(〜)による記憶で16進値をあらわす文字列が$1へ渡されます。

これをhex関数で10進数の数値にし、pack関数でその数値を文字コード1文字に変換します。

結果的に、この1文字へ16進数値をあらわす文字列(%24等)が『s///eg』で変換されるわけです。

尚、g指定は『$value』全体に適用します。

また、e指定は置換文字列『pack("C", hex($1))』を式として評価した結果を対象にすることです。

これがないと『pack("C", hex($1))』の文字列で置換してしまいます。

そして、ハッシュ『%FORM』へ要素名がキーになったデータを格納することができました。

◆ おすすめ Perl本

■ 続・初めてのPerl 改訂版

『初めてのPerl』の次ぎに読むと吉です。

結構いいですが・・・、初心者にはちょっと難しいかもです。

■ 結城浩のPerlクイズ

この本には、ちゃいちゃんパパの小話しが載っています(謎)。

ある程度、Perlを理解している人には、たまらない内容になっています。さすが結城先生だな!

結城浩のPerlクイズ

■ 新版Perl言語プログラミングレッスン入門編

実は、私はまだ読んでいませんが、結城先生の本なので良くないはずがありません。

新版Perl言語プログラミングレッスン入門編

■ CGI&Perlポケットリファレンス (Pocket reference)

この本は、非常に役に立ちます。ちょっと調べるのに最適です。サンプルも説明も的を射ています。

CGI&Perlポケットリファレンス (Pocket reference)

■ Perlベストプラクティス

一読の価値有りだと思います。

Perlベストプラクティス

■ プログラミングPerl〈VOLUME1〉

ご存知、Perl本の聖書、ラクダ本(上)です。

■ プログラミングPerl〈VOLUME2〉

ご存知、Perl本の聖書、ラクダ本(下)です。

◆ おわりに

最後に、本ページが、何かのお役に立てれば幸いです。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

人のよいところをどんどん見つけよう