Perlリファレンス

URLエンコード







URLエンコード


<form>から送られてくる文字列は、特殊文字が%ffのように%に続けて文字コードを16進表記した形の文字列にエスケープされた状態で送られてくる。
<form>から半角英数字以外が送られてくる可能性がある場合は、ほぼ復元処理を記述する必要がある。
復元するには正規表現packを使う。

$form=~tr/+/ /;
$form=~s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2",$1)/eg;
$formに<form>から送られてきた文字列があるとして、
$form=~tr/+/ /;
これは、半角スペースは「+」に変換されて送られてくる可能性があるため、それを復元する。
$form=~s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2",$1)/eg;
正規表現により、%ffを変換する。
変換にpackを使うため、正規表現には「e」オプションをつける。
packには16進を表す文字2文字であることを指定するため"H2"を渡す。


逆に、通常の文字列をURLエンコードする場合は、
$str=~s/(.)/'%'.unpack('H2',$1)/eg;
unpackして%を前につける。
$str=~s/(\W)/'%'.unpack('H2',$1)/eg;
半角英数字以外のみをURLエンコードするなら↑のような感じ。






[編集] [新規] [削除] [バックアップ] [アップロード] [ログイン] [管理]
whwiki 1.3