ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Perlで文字列置換でのおバカな間違いとか、URLのデコードとか、POSTのとり方とか

2005-12-24 19:50:37 | JavaとWeb

PerlをつかってCGIを書いていて、気がついたことのメモ

■■ 文字列置換~s//の注意点
●その1
文字列置換、 $val =~s/検索文字列/置換文字列/;などとかかれるが、このとき、=との間に空白を入れるときは、

$val =~ s/検索文字列/置換文字列/;

のように=~のあとにいれる。

$val = ~s/検索文字列/置換文字列/;

のように、=のあとに入れてしまうと、置換されないばかりか、エラーにもならない。




●その2
 たとえば、PHPの<=?val?>のところを、Perlで置換しようとして、
 $val = ~s/<=?val?>/$val/;
 などとやると、置換しないので注意。

 理由は、?は正規表現において、意味のあるもじだから。

 $key = '<\?=val\?>';
 $val = ~s/$key/$val/;

 とか書くとできる(もちろん、これ以外の書き方もあるけど)
 ここで、
 $key = "<\?=val\?>";
 とすると、\?を解釈してしまうので、この場合も、一致しなくなる。




■■ URLのデコード
 URLのデコードで、
@qs = split(/&/,$qs);
foreach $i (0 .. $#qs) 
{
	($name, $value) = split(/=/,$qs[$i],2);
	$qs{$name} = $value;
}

と書くと、%81%51のように、漢字のところが16進ではいってきてしまうので、URLをデコードしないといけない。やり方は、ここ
http://www.ichikoro.com/webp/bk/00049.html

結果として、こんなかんじ
@qs = split(/&/,$qs);
foreach $i (0 .. $#qs) 
{
	($name, $value) = split(/=/,$qs[$i],2);
	$value =~ tr/+/ /;    #“+”を空白
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;   # %XX変換
	$qs{$name} = $value;
}





■■ フォームのメソッドで、POSTとGET両方OKにする

 ここにある
http://www.futomi.com/lecture/form/index.html
 それをまとめると、こんなかんじ
if ( $ENV{'REQUEST_METHOD'} eq "POST" )
{
	read (STDIN, $qs, $ENV{'CONTENT_LENGTH'});
}
else
{
	$qs = $ENV{'QUERY_STRING'};
}

$qsの中に入ってくる。




■■ そのほか、参考になったページ

とほほのperl入門 http://www.tohoho-web.com/wwwperl.htm

 それと、調べているうちに、気になった本。
AJAX Webアプリケーション アイデア ブック


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« サンタ追跡プログラムにみる... | トップ | 放送局は、決まった形式のレ... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事