概念と使用方法
- PHPバージョン
- 4+
rawurlencode()
関数は
URL全体ではなく、個々のURI構成要素(例:検索キーワード、ファイル名、クエリパラメータの値など)をURI標準規格であるRFC 3986に従って安全にエンコードする際に使用されます。
基本の例
$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構成要素(例:検索キーワード、ファイル名、クエリパラメータの値など)のデータを安全にエンコードする場合に便利です。
- この関数は、
/
、:
、?
、&
、=
などほとんどの特殊文字をエンコードするため、実際にURL構造を保持する必要がある場合、つまりURL全体をエンコードする場合には適していません。これらの文字はURLにおける各構造(プロトコル、パス、クエリ、パラメータの区切りなど)を定義する重要な区切り文字であり、単なる特殊文字ではなくURL文法の要素です。これらをすべてエンコードしてしまうと、ブラウザはその文字列をもはや有効なURLとして解釈できなくなります。(ただし、「単なる文字列データとして保持する場合」や「送信用データとしてのみ利用する場合」はまったく問題なく、むしろそのような用途には安全にエンコードする方法となります。)
注意してください!
ひとつ注意すべき点は、空白文字が%20
としてエンコードされることです。一方、urlencode()
関数の場合、空白文字は+
としてエンコードされます。そのため、空白文字を+
としてエンコードする必要がある状況(一般的には、HTMLフォームで収集したデータをURLのクエリ文字列に追加したり、別のページに渡す場合)では、rawurlencode()
関数を使用するよりも、urlencode()
関数を使用することが推奨されます。
構文
rawurlencode(string $string): string
引数
$string |
エンコードするURLです。 |
---|
戻り値
アルファベットの大文字・小文字、数字、-
、_
、.
、~
の文字を除くすべての文字は、2桁の16進数の数値を後続させたパーセント記号(%
)で置き換えられます。また、空白は%20
としてエンコードされます。
これは、リテラル文字が特殊なURL区切り文字として解釈されるのを防ぎ、文字変換(例えば一部の電子メールシステムなど)が行われる送信媒体によってURLが破損するのを防ぐために、RFC 3986で説明されているエンコード方法です。
使用例
rawurlencode()
関数は、主に特定の要件やURL構文規則を厳密に遵守する必要がある場合に使用されます。そうでない場合は、ほとんどの場合、urlencode()
関数を使用します。
rawurlencode()
関数を使用して、特定の要件や厳密なURL構文規則を遵守する必要がある状況の一つが、ファイルパスをURLに追加する場合です。ファイルパスには空白や特殊文字が含まれることがあり、これをURLに正しく追加するにはrawurlencode()
関数を使用する必要があります。
例えば、ウェブサーバーで画像ファイルのパスをURLに追加する必要がある場合を考えてみましょう。ファイルパスには空白(''
)、スラッシュ(/
)などの特殊文字が含まれることがあります。
$server_url = 'https://www.example.com';
$image_path = '/images/my image.jpg';
// ファイルパスをURLに追加する際にrawurlencode()関数を使用
$encoded_image_path = rawurlencode($image_path);
$image_url = $server_url . $encoded_image_path;
echo $image_url;
// 出力: https://www.example.com%2Fimages%2Fmy%20image.jpg
上記の例では、ファイルパスに含まれる空白やスラッシュをrawurlencode()
関数を使用してURLに安全に追加し、最終的に画像のURLを生成しています。こうすることで、ファイルパスの特殊文字がURL規則を遵守しつつ、ウェブ上で正しく処理されます。
このように、rawurlencode()
関数は、ファイルパスのようにURLに空白や特殊文字を含むデータを扱う場合に便利であり、データがURL規則を厳密に遵守する必要がある状況で使用されます。