Hippo2000 (2000/7/28)
URI::Escapeモジュールなのです。
作者はGisle Aasさんです。メールで許可をいただきました。
URI::Escape - 安全でない文字のエスケープとアンエスケープ
use URI::Escape;
$safe = uri_escape("10% is enough\n");
$verysafe = uri_escape("foo", "\0-\377");
$str = uri_unescape($safe);
このモジュールはRFC 2396で定義されているURI文字列のエスケープとアンエスケープのための関数を提供します。URIはRFC2396でuricとして示された制限された文字のセットで構成されます。制限された文字のセットは数字、文字そしてほとんどの文字エンコーディングとインターネット・ユーザが利用できる入力機能に共通なものから選ばれたいくつかの記号で構成されます。
"A" .. "Z", "a" .. "z", "0" .. "9",
";", "/", "?", ":", "@", "&", "=", "+", "$", ",", # reserved
"-", "_", ".", "!", "~", "*", "'", "(", ")"
さらに、すべてのバイト(オクテット)は、"%"とその後に続く2文字の16進数の3文字からなるエスケープ・シーケンスによってURIで表すことが出来ます。バイトはUS-ASCII文字を使って直接表すことも出来ます。(もしその文字がuricの一部であれば)
uric文字の幾つかは区切り文字として、あるURI構成要素の一部として使うように予約されています。通常のデータとして取り扱いたければ、これらはエスケープされなければなりません。さらなる詳細はRFC2396を読んでください。
このモジュールから提供される(そしてデフォルトでエクスポートされる)関数は以下の通りです:
uri_escape()関数は、オプションで文字のセットを上書きする2番目の引数を取ります。そのセットは正規表現文字クラス([]の間)で使うことが出来る文字列として指定されます。例:
"\x00-\x1f\x7f-\xff" # すべての制御および先頭ビットが立った(hi-bit)文字 "a-z" # すべての小文字 "^A-Za-z" # 文字以外のすべて
エスケープされるデフォルトの文字セットは上記で示したuric文字ではない部分のすべてです。
これは以下のものと同じです:
$string =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
しかし、このREがするようにその場で(in-place)変更しません。REの代りにuri_unescape()関数を使うと、コードは見やすくなり、タイプする文字も少し減ります。
モジュールはすべての256バイトからの対応するエスケープ・コードへのマッピングが入った%escapeハッシュもエクスポートします。毎回sprintf("%%%02X", ord($byte))を評価するよりも、このハッシュを検索するほうが速くなります。
URI
Copyright 1995-1998 Gisle Aas.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。