URLエンコード / URLデコードするには (urlencode, urldecode)

各プログラミング言語でのURLエンコードまたはURLデコードする方法。

PHP

// URLデコード
$str = urldecode("%2B+%3D%26 %E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A");
echo $str;
// => + =& あいうえお

urlencode 関数 | PHP Manual
http://www.php.net/manual/ja/function.urlencode.php

urldecode 関数 | PHP Manual
http://www.php.net/manual/ja/function.urldecode.php

Ruby

require 'cgi'

# URLエンコード
puts CGI.escape "+ =&"
# => %2B+%3D%26

Perl

URLエンコードの例

my $str = "abc(def&ghi?jk/lmn)";
$str =~ s/([^ 0-9a-zA-Z])/"%".uc(unpack("H2",$1))/eg;
$str =~ s/ /+/g;
print($str);
# => abc%28def%26ghi%3Fjk%2Flmn%29

エンコード前はバイナリである必要があるため、日本語が含まれる場合はいったん encode_utf8 などで変換する必要がある。

my $str = "あ";
$str = encode_utf8($str);
$str =~ s/([^ 0-9a-zA-Z])/"%".uc(unpack("H2",$1))/eg;
$str =~ s/ /+/g;
print($str);
# => %E3%81%82

URLデコードの例

my $str = "%E3%81%82";
$str =~ s/\+/ /g;
$str =~ s/%([0-9a-fA-F]{2})/pack("H2",$1)/eg;
print($str);
# => あ

以下のように URI::Escape を使ってもよい。

use URI::Escape;

# URLエンコード
print uri_escape("+ =&");
# => %2B%20%3D%26

# 日本語がある場合は uri_escape_utf8 を使う必要がある。
# 引数は、UTF8フラグがついていいるUnicode文字列で、
# UTF8のバイナリをURLエンコードする。
print uri_escape_utf8('あ');
# => %E3%81%82

# URLデコード
# 結果にはUTF8フラグが付く
print uri_unescape("%2B+%3D%26%E3%81%82");
# => ++=&あ

print uri_unescape("%2B%20%3D%26%E3%81%82");
# => + =&あ
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。