URLエンコード関数の比較
PHPでURLエンコードを行う関数は、大きく分けて三つあります。
urlencode()
rawurlencode()
http_build_query()
これらの関数はURL文字列をエンコードするために使用され、それぞれ異なる目的と方法でエンコードを行います。各関数の使用目的と特徴について見ていきます。
URLエンコード関数ごとの使用目的と特徴
各関数の使用目的を比較すると、次のようになります。
比較項目 | urlencode() |
rawurlencode() |
http_build_query() |
---|---|---|---|
使用目的 | URLクエリパラメータの値として使用する文字列をエンコードする際に主に使用されます。 特に、この関数は次のページに渡す変数の値をURLクエリ値としてエンコードする場合に便利です。 |
URL全体ではなく、個々のURI構成要素(例:検索キーワード、ファイル名、クエリパラメータ値など)を、URI標準仕様であるRFC 3986に従って安全にエンコードする際に使用されます。 | 配列やオブジェクトをURLで使用可能な文字列形式にエンコードして、クエリ文字列を生成する関数です。この関数は、配列やオブジェクトを基にHTTPリクエストを生成したりURLを作成する際に非常に便利に使用されます。 |
urlencode()
次の例は、URLクエリパラメータの値として使用する文字列をエンコードする際に主に使用される、urlencode()
関数の使い方を示しています。
// 次のページに渡す変数の値
$search = 'hello world!';
// URLクエリ値としてエンコード
$encodedSearch = urlencode($search);
// エンコードされた値をクエリ文字列に含める
$url = 'https://example.com/search.php?q=' . $encodedSearch;
echo $url;
// 出力: 'https://example.com/search.php?q=hello+world%21'
特徴
- 空白はプラス(
+
)記号に置き換えられるという特徴があります。 - 空白がプラス(
+
)記号に置き換えられるというこの特徴は、HTMLフォームデータの送信方法、つまりapplication/x-www-form-urlencoded
メディアタイプとの互換性によるものです。 urlencode()
関数は、このようなHTMLフォーム送信の規則に従うように設計されています。空白をプラス(+
)としてエンコードする点は、HTMLフォームデータの送信方法と同じだからです。- このような理由から、
urlencode()
関数はURLクエリパラメータの値として使用する文字列をエンコードする際に主に使用されます。
rawurlencode()
rawurlencode()
関数はほとんどの特殊文字をエンコードするため、個々のURI構成要素(例:検索キーワード、ファイル名、クエリパラメータ値など)のデータを安全にエンコードする場合に便利です。
$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()
関数は、URLにおけるプロトコル、ドメイン、パスの区切り文字(/
、:
、?
、&
、#
)など、特別な意味を持つ文字もRFC 3986 のURI規格に従ってエンコードします。- ほとんどの特殊文字をエンコードするため、個々のURI構成要素(例:検索キーワード、ファイル名、クエリパラメータ値など)のデータを安全にエンコードする場合に便利です。
- 1つ注意すべき点は、空白文字が
%20
としてエンコードされることです。一方、urlencode()
関数では、空白文字は+
としてエンコードされます。そのため、空白文字を+
としてエンコードする必要がある場合(一般的には、HTMLフォームで収集したデータをURLのクエリ文字列に追加したり、別ページに渡したりする場合)には、rawurlencode()
関数よりもurlencode()
関数を使用する方が適しています。
http_build_query()
http_build_query()
関数は、配列やオブジェクトをURLで使用可能な文字列形式にエンコードしてクエリ文字列を生成する関数です。この関数は、配列やオブジェクトを基にHTTPリクエストを生成したりURLを作成したりする際に非常に便利に使用されます。
次は、配列を基にURLを作成する基本的な例です。
$data = array(
'name' => 'John Doe',
'age' => 30,
'city' => 'New York'
);
$queryString = http_build_query($data);
echo $queryString;
// 出力: 'name=John+Doe&age=30&city=New+York'
特徴
- 文字列をエンコードするのではなく、
- 配列やオブジェクトをURLで使用可能な文字列形式にエンコードしてクエリ文字列を生成する関数です。
- 配列やオブジェクトを基にHTTPリクエストを生成したりURLを作成したりする際に非常に便利に使用されます。