概念と使用方法
- PHPバージョン
- 4+
urlencode()
関数は
URLクエリパラメータの値として使用する文字列をエンコードする際に主に利用されます。
特に、この関数は次のページに渡す変数の値をURLクエリ値としてエンコードする際に便利です。
特徴
urlencode()
関数は、指定された文字列をURLで使用できるようにエンコードします。- 空白はプラス(
+
)記号に置き換えられるという特徴があります。 - 空白をプラス(
+
)記号に置き換えるこの特徴は、HTMLフォームデータの送信方式、すなわちapplication/x-www-form-urlencoded
メディアタイプとの互換性によるものです。 urlencode()
関数は、このようなHTMLフォーム送信の規則に従うように設計されています。空白をプラス(+
)にエンコードするHTMLフォームデータの送信方式と同じであるためです。- このような理由から、
urlencode()
関数はURLクエリパラメータの値として使用する文字列をエンコードする際に主に利用されます。
覚えておいてください!
長期間にわたり、PHP開発者の間では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'
ウェブアプリケーションでは、ユーザーから入力を受け取り、URLに含めて別のページに渡すことが頻繁に発生します。
このとき、クエリ文字列に使用される値は空白や特殊文字を含む可能性があるため、正しいURLを生成するには必ずエンコードが必要です。
また、次のページに変数を渡す際も、変数の値に空白や特殊文字が含まれる可能性があるため、安全に渡すためにurlencode()
関数を使用すると便利です。
構文
urlencode(string $string): string
引数
$string |
URLエンコードする文字列です。 この文字列は関数に渡され、URLエンコードされ、エンコードされた文字列が返されます。 |
---|
戻り値
アルファベットの大文字・小文字、数字、-
、_
、.
の文字を除くすべての文字は、2桁の16進数に続くパーセント(%
)記号で置き換えられます。また、空白はプラス(+
)記号でエンコードされます。
このエンコードは、ウェブフォームから送信されたデータと同じ方式でエンコードされます。つまり、application/x-www-form-urlencoded
メディアタイプと同じ方式です。ブラウザは空白を+
として解釈します。したがって、HTMLフォームからURLを収集する際には主にurlencode()
関数がよく使用されます。HTMLフォームで収集したデータをURLのクエリ文字列に追加したり、別のページに渡す場合に適しています。
使用例
URLに関連するurlencode()
関数の使用例です。
ウェブフォーム文字列のエンコード
以下の例は、ウェブフォームでユーザーから文字列を入力させ、urlencode()
関数を使用して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リクエストのクエリ文字列のエンコード
この例は、複数のクエリパラメータをURLにエンコードする方法を示しており、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'