PerlでURIエンコード・デコードする。
「URIエンコード」とは、URIで使用禁止となっている文字を埋め込むためのルールである。
RFC上ではPercent-Encodingと呼ばれ、ASCII以外の文字を「%xx」(xxは16進数)という形でURIに表記することになっている。
使用される文字コードに制限はないが、16進数のコードは文字コードによって異なるため、デコードされた文字を扱う際はページに合わせて文字コードを変換する必要がある。
PerlでURIエンコードする場合、正規表現で1文字分を選択して、unpackで16進数の表記に変換、そして半角スペースを+に変換します。
URIデコードはその逆で、+をスペースに変換し、正規表現で %xx の xx をpackで文字データに戻します。
関数にしておけば簡単です。
■URIエンコード
■URIデコード
RubyならURIモジュールにエンコード・デコード用の関数があるので一発です。
・URIエンコード ⇒
・URIデコード ⇒
PerlもURI::Escapeモジュールを使えばURIエンコード・デコードが可能です。
■Perl で url エンコードと url デコード
■URIエンコード - Wikipedia
■URI::Escape - search.cpan.org
■URLを触る時は、URI(モジュール名)以外も知っておくと吉
RFC上ではPercent-Encodingと呼ばれ、ASCII以外の文字を「%xx」(xxは16進数)という形でURIに表記することになっている。
使用される文字コードに制限はないが、16進数のコードは文字コードによって異なるため、デコードされた文字を扱う際はページに合わせて文字コードを変換する必要がある。
PerlでURIエンコードする場合、正規表現で1文字分を選択して、unpackで16進数の表記に変換、そして半角スペースを+に変換します。
URIデコードはその逆で、+をスペースに変換し、正規表現で %xx の xx をpackで文字データに戻します。
関数にしておけば簡単です。
■URIエンコード
sub url_encode($) {
my $str = shift;
$str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
$str =~ tr/ /+/;
return $str;
}
■URIデコード
sub url_decode($) {
my $str = shift;
$str =~ tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
return $str;
}
RubyならURIモジュールにエンコード・デコード用の関数があるので一発です。
・URIエンコード ⇒
URI.escape($str) or URI.encode($str)
・URIデコード ⇒
URI.unescape($str) or URI.decode($str)
PerlもURI::Escapeモジュールを使えばURIエンコード・デコードが可能です。
use URI::Escape;
uri_escape($str);
uri_unescape($str);
■Perl で url エンコードと url デコード
■URIエンコード - Wikipedia
■URI::Escape - search.cpan.org
■URLを触る時は、URI(モジュール名)以外も知っておくと吉