PHPバージョン
4+
/* 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
urldecode(string $string): string
// 元の文字列
$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!'
// データベースやログから取得したエンコード済みクエリ文字列(英字+空白のエンコードのみ含む)
$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'