URLデコード関数の比較
PHPでURLデコードを行う関数は大きく分けて3種類あります。
これらの関数はエンコードされたURL文字列をデコードするために使用され、それぞれ異なる目的や方法を提供します。ここでは各関数の利用目的と特徴について説明します。
URLデコード関数ごとの使用目的と特徴
各関数の使用目的を比較すると、次のようになります。
| 比較項目 | urldecode() |
rawurldecode() |
parse_str() |
|---|---|---|---|
| 使用目的 | urlencode()関数でエンコードされて渡されたURLクエリパラメータの値を復元する際に主に使用します。 |
rawurlencode()関数で厳密にエンコードされて渡されたURIコンポーネント(例:パスセグメント、クエリパラメータ値)をデコードする際に主に使用します。 |
http_build_query()関数でエンコードされたクエリ文字列をデコードし、変数としてパースする際に使用します。 |
urldecode()
次の例は、urlencode()関数でエンコードされて渡されたURLクエリパラメータの値を復元する際に使用されるurldecode()関数の使い方を示しています。
/* 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進数で表されたエンコード文字を実際の文字に変換してデコードし、プラス記号(+)は空白文字としてデコードされます。
rawurldecode()
次の例は、rawurlencode()関数で厳密にエンコードされて渡されたURIコンポーネント(例:パスセグメント、クエリパラメータ値)をデコードする際に使用されるrawurldecode()関数の使い方を示しています。
/* rawurlencode()関数でクエリパラメータの値をエンコード */
$keyword = 'iPhone & Galaxy/Note=100% #1';
$encoded = rawurlencode($keyword);
echo 'https://example.com/search?query=' . $encoded;
// 出力: 'https://example.com/search?query=iPhone%20%26%20Galaxy%2FNote%3D100%25%20%231'
/* rawurlencode()でエンコードされたクエリパラメータの値をデコード */
$decoded = rawurldecode($encoded);
echo $decoded;
// 出力: 'iPhone & Galaxy/Note=100% #1'
特徴
- URLでエンコードされた文字列を元の文字列に戻すための関数です。
rawurlencode()関数でエンコードされたURLをデコードするのに最適化されています。%20は空白に変換されるという特徴があります。
rawurlencode()関数は、与えられた文字列をRFC 3986に従ってURLで使用できる形式にエンコードします。
RFC 3986はURLエンコードのための標準であり、アルファベットの大文字・小文字、数字、-、_、.、~の文字を除くすべての文字は、2桁の16進数とともにパーセント(%)記号で置き換えられます。また、空白は%20としてエンコードされます。
parse_str()
次の例は、URLで使用できる形式にエンコードされたクエリ文字列をデコードして変数としてパースするparse_str()関数の使い方です。
// URLで使用できる文字列形式にエンコードする配列
$data = array(
'name' => 'John Doe',
'age' => 30,
'city' => 'New York'
);
// http_build_query()関数を使用してクエリ文字列にエンコード
$queryString = http_build_query($data);
echo $queryString; // 出力: name=John+Doe&age=30&city=New+York
// parse_str()関数を使用してデコード
// パースしたデータを第2引数の$decodedArrayに配列として格納
parse_str($queryString, $decodedArray);
print_r($decodedArray); // 出力: Array ( [name] => John Doe [age] => 30 [city] => New York )
特徴
- この関数は結果を返すのではなく、第2引数に渡された変数にパースしたデータを配列形式で格納します。
- 主に
http_build_query()関数でエンコードされたクエリ文字列をデコードして変数としてパースする際に使用します。 parse_str()関数は、http_build_query()関数でエンコードされたURLクエリ文字列をデコードしてキー・バリューのペアに変換し、これを配列または変数に割り当てます。
http_build_query()関数は
配列またはオブジェクトをURLで使用できる形式にエンコードしてクエリ文字列を生成する関数です。
関連項目
- PHP urlencode() 関数:URL クエリパラメータの値をエンコードする際に使用
- PHP http_build_query()関数:配列やオブジェクトからURLエンコードされたクエリ文字列を生成
- PHP rawurlencode()関数:URLの構成要素を安全にエンコードする際に使用
- PHP URLエンコード関数:エンコードする方法
- PHP urldecode()関数:urlencode()でエンコードされたURLをデコードする時
- PHP rawurldecode()関数:rawurlencode()でエンコードされたURLをデコードする際に使用
- PHP parse_str() 関数:URLクエリ文字列のデコード、変数へのパース