概念と使用方法
PHPバージョン(4+)
urlencode()関数はURLクエリパラメータの値として使用する文字列をエンコードする際に主に利用されます。特に、この関数は次のページに渡す変数の値をURLクエリ値としてエンコードする際に便利です。
特徴
- urlencode()関数は、指定された文字列をURLで使用できるようにエンコードします。
- 空白はプラス(+)記号に置き換えられるという特徴があります。
- 空白をプラス(+)記号に置き換えるこの特徴は、HTMLフォームデータの送信方式、すなわちapplication/x-www-form-urlencodedメディアタイプとの互換性によるものです。
- urlencode()関数は、このようなHTMLフォーム送信の規則に従うように設計されています。空白をプラス(+)にエンコードするHTMLフォームデータの送信方式と同じであるためです。
- このような理由から、urlencode()関数はURLクエリパラメータの値として使用する文字列をエンコードする際に主に利用されます。
基本例
// 次のページに渡す変数の値
$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'
ウェブアプリケーションでは、ユーザーから入力を受け取り、URLに含めて別のページに渡すことが頻繁に発生します。このとき、クエリ文字列に使用される値は空白や特殊文字を含む可能性があるため、正しいURLを生成するには必ずエンコードが必要です。
また、次のページに変数を渡す際も、変数の値に空白や特殊文字が含まれる可能性があるため、安全に渡すためにurlencode()関数を使用すると便利です。
構文
urlencode(string $string): string
戻り値
アルファベットの大文字・小文字、数字、-、_、.の文字を除くすべての文字は、2桁の16進数に続くパーセント(%)記号で置き換えられます。また、空白はプラス(+)記号でエンコードされます。
このエンコードは、ウェブフォームから送信されたデータと同じ方式でエンコードされます。つまり、application/x-www-form-urlencodedメディアタイプと同じ方式です。ブラウザは空白を+として解釈します。したがって、HTMLフォームからURLを収集する際には主にurlencode()関数がよく使用されます。HTMLフォームで収集したデータをURLのクエリ文字列に追加したり、別のページに渡す場合に適しています。
使用例
# ウェブフォーム文字列のエンコード
$userinput = 'Data123!@-_ +';
echo "UserInput: $userinput\n";
echo '<a href="mycgi?foo=' . urlencode($userinput) . '">';
/* 出力:
'UserInput: Data123!@-_ +'
'<a href="mycgi?foo=Data123%21%40-_+%2B">'
*/
# GETリクエストのクエリ文字列のエンコード
$name = '山田太郎';
$age = 20;
$query_string = 'name=' . urlencode($name) . '&age=' . urlencode($age);
$url = "https://example.com/?$query_string";
echo $url;
// 出力: 'https://example.com/?name=%E5%B1%B1%E7%94%B0%E5%A4%AA%E9%83%8E&age=20'
参考資料