概念と使用方法
- PHPバージョン
- 4+
urldecode()
関数は
パーセント記号(%
)とその後に続く2桁の16進数でエンコードされた文字を元の文字に復元し、
プラス記号(+
)を空白文字に変換するデコード関数です。
この関数はurlencode()
関数でエンコードされて渡されたURLクエリパラメータの値を復元する際に主に使用されます。
基本の例
/* urlencode()関数を使用してURLで利用できる形式に文字列をエンコード */
$url = 'https://www.example.com/page.php?name=John Doe';
$encoded_url = urlencode($url);
echo $encoded_url . '<br>';
// 出力: https%3A%2F%2Fwww.example.com%2Fpage.php%3Fname%3DJohn+Doe
/* urlencode()でエンコードされたURLをデコード */
$decoded_url = urldecode($encoded_url);
echo $decoded_url;
// 出力: https://www.example.com/page.php?name=John Doe
特徴
- URLでエンコードされた文字列を再び元の文字列にデコードする関数です。
urlencode()
関数でエンコードされたURLをデコードするのに最適化されています。- プラス記号(
+
)は空白に変換されるという特徴があります。
urlencode()
関数は
指定された文字列をURLで使用できるようにエンコードします。空白はプラス記号(+
)に変換されます。urldecode()
関数はパーセント記号(%
)とその後に続く2桁の16進数で表されたエンコード文字を実際の文字に変換してデコードし、プラス記号(+
)を空白文字にデコードします。
注意してください!$_GET
や$_REQUEST
のようなスーパーグローバル変数のURLは既にデコードされた状態です。これらの変数に対してurldecode()
関数を使用すると、予期しない結果やセキュリティ上の問題が発生する可能性があります。そのため、このような変数を追加でデコードしてはいけません。
urldecode()
関数は$_GET
や$_REQUEST
のようにPHPが自動的にデコードする入力には使用せず、手動でエンコードされたURL文字列を必要に応じてデコードする場合にのみ使用します。
構文
urldecode(string $string): string
引数
$string |
デコードする対象のエンコード済みURL文字列です。 |
---|
戻り値
渡された文字列$string
内のすべての%##
エンコード形式をデコードし、+
記号を空白文字にデコードした後、デコード済みの文字列を返します。
使用例
一般的に、urlencode()
関数でエンコードされて渡されたURLクエリパラメータの値は、PHPでは$_GET
やparse_str()
関数を通じて自動的にデコードされた値として取得できるため、ほとんどの場合、直接urldecode()
を使用する必要はありません。
しかし、次のような場合にはurldecode()
を直接使用する必要があります。
- URL全体を文字列として受け取り、手動でクエリ文字列を解析する場合
- 外部API、ログ、データベースなどにエンコードされたURL文字列が保存されている場合
URL全体を文字列として受け取り、手動でクエリ文字列を解析する場合
// 元の文字列
$search = 'hello world!';
// urlencode()でエンコード
$encodedSearch = urlencode($search);
// URL生成
$url = 'https://example.com/search.php?q=' . $encodedSearch;
echo "生成されたURL: $url";
// 出力: '生成されたURL: https://example.com/search.php?q=hello+world%21'
// URLからクエリ文字列を抽出
$parsedUrl = parse_url($url);
$queryString = $parsedUrl['query']; // 'q=hello+world%21'
// クエリ文字列から値だけを手動で抽出(parse_strは使用しない)
$queryParts = explode('=', $queryString);
$encodedValue = $queryParts[1]; // hello+world%21
// urldecode()で明示的に復元
$decodedValue = urldecode($encodedValue);
echo "復元された検索語 (urldecode使用): " . $decodedValue;
// 出力: '復元された検索語 (urldecode使用): hello world!'
外部API、ログ、データベースなどにエンコードされたURL文字列が保存されている場合
// データベースやログから取得したエンコード済みクエリ文字列(英字+空白のエンコードのみ含む)
$encodedQuery = 'name=John+Doe&city=New+York';
// クエリパラメータごとに分割
$pairs = explode('&', $encodedQuery);
$params = [];
foreach ($pairs as $pair) {
$parts = explode('=', $pair);
$key = $parts[0];
$value = isset($parts[1]) ? $parts[1] : '';
// urldecode()で直接デコード
$params[$key] = urldecode($value);
}
echo '名前: ' . $params['name'] . '<br>'; // 出力: '名前: John Doe'
echo '都市: ' . $params['city'] . '<br>'; // 出力: '都市: New York'