Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】rawurlencode()関数の使い方

rawurlencode関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

rawurlencode関数は、URL(Uniform Resource Locator)の特定の部分を安全にエンコード(符号化)する関数です。インターネット上でデータが正しく転送されるよう、URLに含まれる特殊な意味を持つ文字や、日本語などの非ASCII文字を、URLで安全に扱える形式に変換します。

この関数は、URI(Uniform Resource Identifier)の構成要素をエンコードするための標準的な方法であるRFC 3986に厳密に準拠しています。具体的には、半角スペース文字を「+」(プラス記号)ではなく「%20」としてエンコードする点が特徴です。これは、URLのパス部分やクエリパラメータの値など、個々のURIコンポーネントをエンコードする際に特に重要です。

例えば、Webサーバー上のファイルパスをURLに含める場合や、特別な記号や日本語を含む検索キーワードをクエリパラメータとして渡す場合にこの関数を使用することで、文字化けやURLの構造破壊を防ぎ、意図した通りのリクエストを送信できます。Webアプリケーション開発において、安全で正確なURLを構築し、異なるシステム間でのデータのやり取りを円滑に行う上で重要な役割を果たす関数です。

構文(syntax)

1<?php
2$string_to_encode = "これは日本語の文字列です。@#$";
3$encoded_string = rawurlencode($string_to_encode);
4echo $encoded_string;
5?>

引数(parameters)

string $string

  • string $string: URLエンコードする文字列

戻り値(return)

string

URLエンコードされた文字列を返します。これは、URLで安全に使用できない文字をパーセントエンコーディングで置き換えたものです。

サンプルコード

PHP rawurlencode オンラインデモ

1<?php
2
3/**
4 * Webフォームから受け取った文字列を rawurlencode でエンコードするサンプルです。
5 *
6 * このスクリプトは、オンラインのエンコードツールのように動作します。
7 * フォームに文字列を入力して送信すると、RFC 3986 に従って
8 * URLエンコードされた結果を表示します。
9 *
10 * 使い方:
11 * 1. このファイルを Webサーバーの公開ディレクトリに設置します (例: index.php)。
12 * 2. Webブラウザでこのファイルにアクセスします。
13 * 3. フォームにエンコードしたい文字列(例: "PHPのテスト/スペース")を入力し、「エンコード」ボタンを押します。
14 */
15function rawUrlEncodeOnlineDemo(): void
16{
17    // スーパーグローバル変数から安全に値を取得します。
18    // 値が存在しない場合は空文字列 '' を使用します。
19    $inputString = $_GET['input_string'] ?? '';
20    $encodedString = '';
21
22    // フォームから文字列が送信された場合のみ処理を実行します。
23    if ($inputString !== '') {
24        // rawurlencode() を使って文字列をURLエンコードします。
25        // 半角スペースは '+' ではなく '%20' に変換されます。
26        // 日本語のようなマルチバイト文字や記号も %XX の形式に変換されます。
27        $encodedString = rawurlencode($inputString);
28    }
29
30    // HTMLを出力します。
31    // htmlspecialchars() は、クロスサイトスクリプティング (XSS) 攻撃を防ぐために重要です。
32    echo '<!DOCTYPE html>' . PHP_EOL;
33    echo '<html lang="ja">' . PHP_EOL;
34    echo '<head>' . PHP_EOL;
35    echo '    <meta charset="UTF-8">' . PHP_EOL;
36    echo '    <title>PHP rawurlencode オンラインデモ</title>' . PHP_EOL;
37    echo '    <style>body { font-family: sans-serif; line-height: 1.6; padding: 20px; }</style>' . PHP_EOL;
38    echo '</head>' . PHP_EOL;
39    echo '<body>' . PHP_EOL;
40    echo '    <h1>rawurlencode オンラインデモ</h1>' . PHP_EOL;
41    echo '    <form action="" method="get">' . PHP_EOL;
42    echo '        <label for="input_string">エンコードする文字列:</label><br>' . PHP_EOL;
43    echo '        <input type="text" id="input_string" name="input_string" size="50" value="' . htmlspecialchars($inputString, ENT_QUOTES, 'UTF-8') . '">' . PHP_EOL;
44    echo '        <input type="submit" value="エンコード">' . PHP_EOL;
45    echo '    </form>' . PHP_EOL;
46
47    // エンコード結果が存在する場合に結果を表示します。
48    if ($encodedString !== '') {
49        echo '    <hr>' . PHP_EOL;
50        echo '    <h2>結果</h2>' . PHP_EOL;
51        echo '    <p><strong>元の文字列:</strong><br>' . htmlspecialchars($inputString, ENT_QUOTES, 'UTF-8') . '</p>' . PHP_EOL;
52        echo '    <p><strong>エンコード後の文字列:</strong><br>' . htmlspecialchars($encodedString, ENT_QUOTES, 'UTF-8') . '</p>' . PHP_EOL;
53        echo '    <p><strong>使用例 (URLパスの一部):</strong><br><a href="https://example.com/files/' . htmlspecialchars($encodedString, ENT_QUOTES, 'UTF-8') . '">https://example.com/files/' . htmlspecialchars($encodedString, ENT_QUOTES, 'UTF-8') . '</a></p>' . PHP_EOL;
54    }
55
56    echo '</body>' . PHP_EOL;
57    echo '</html>' . PHP_EOL;
58}
59
60// 関数を実行してページを表示します。
61rawUrlEncodeOnlineDemo();

PHP 8のrawurlencode関数は、文字列をURLエンコードするために使用されます。この関数は、Webアドレス(URL)の一部として安全にデータを渡せるように、特殊な文字を「%XX」形式の16進数表現に変換する役割を持ちます。引数にはエンコードしたいstring型の文字列を一つ渡すと、エンコードされたstring型の文字列が戻り値として返されます。

特に、半角スペースは+ではなく%20に変換される点が特徴で、RFC 3986で定義されているURIのルールに厳密に従います。日本語のようなマルチバイト文字や/?&=#などの記号も、正しく%XX形式にエンコードされます。

提供されたサンプルコードは、まるでオンラインのエンコードツールのようにお使いいただけます。Webフォームに文字列を入力し送信すると、rawurlencode関数によってエンコードされた結果を表示します。例えば、「PHPのテスト/スペース」と入力すると、「PHP%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%2F%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9」のように表示され、URLのパス部分などで利用する際に非常に役立ちます。この関数は、ファイル名や検索キーワード、パラメータ値などをURLに含める際に、文字化けやURLの構造破壊を防ぐために非常に重要です。

rawurlencode関数は、URLのパス部分(例: ファイル名)に日本語や記号などを含める際に使います。スペースが%20に変換されるのが特徴です。似た関数にurlencodeがありますが、こちらはスペースを+に変換するため、主に検索クエリ(?q=...)のような部分で使われます。この2つは目的に応じて正しく使い分けることが重要です。また、ユーザーが入力した値を画面に表示する際は、サンプルコードのように必ずhtmlspecialchars関数を使用してください。これにより、クロスサイトスクリプティング(XSS)というセキュリティ上の問題を防ぐことができます。$_GETからの値の取得時に?? ''と記述することで、値が存在しない場合のエラーを防ぎ、より安全なコードになります。

PHP rawurlencode vs urlencode 比較

1<?php
2
3/**
4 * rawurlencode と urlencode の違いを比較するサンプルコード。
5 *
6 * この関数は、システムエンジニアを目指す初心者向けに、
7 * PHP の2つのURLエンコード関数の挙動の違いを明確に示します。
8 * 主な違いは、スペース (' ') のエンコード方法です。
9 */
10function demonstrateUrlEncodingComparison(): void
11{
12    // 比較対象となる元の文字列。スペース、特殊文字、パスセグメントに現れる可能性のある文字を含む。
13    $originalString = "Hello World! Query & Path / Segment";
14
15    echo "元の文字列: " . $originalString . PHP_EOL . PHP_EOL;
16
17    // urlencode の使用例
18    // スペースを '+' にエンコードします。
19    // 主に HTML フォームの 'application/x-www-form-urlencoded' コンテンツタイプで使用されます。
20    $encodedUrlencode = urlencode($originalString);
21    echo "urlencode 結果:    " . $encodedUrlencode . PHP_EOL;
22    echo "  (スペースが '+' に変換されます)" . PHP_EOL . PHP_EOL;
23
24    // rawurlencode の使用例
25    // スペースを '%20' にエンコードします。
26    // RFC 3986 (URI 標準) に厳密に準拠しており、URI のパスセグメントやクエリパラメータの値に適しています。
27    $encodedRawurlencode = rawurlencode($originalString);
28    echo "rawurlencode 結果: " . $encodedRawurlencode . PHP_EOL;
29    echo "  (スペースが '%20' に変換されます)" . PHP_EOL . PHP_EOL;
30
31    // それぞれをデコードして、元の文字列に戻ることを確認 (参考)
32    echo "urlencode デコード:    " . urldecode($encodedUrlencode) . PHP_EOL;
33    echo "rawurlencode デコード: " . rawurldecode($encodedRawurlencode) . PHP_EOL;
34}
35
36// 関数を実行して結果を出力
37demonstrateUrlEncodingComparison();

PHPのrawurlencode関数は、文字列をURLエンコードするために使用されます。引数にはエンコードしたい文字列(string型)を一つ取り、エンコードされた新しい文字列(string型)を返します。

このサンプルコードは、rawurlencodeurlencodeという二つのURLエンコード関数の違いを比較しています。両者の主な違いは、文字列に含まれるスペースのエンコード方法です。

urlencode関数は、スペースを + 記号に変換します。これは主にHTMLフォームのデータを送信する際のエンコード形式(application/x-www-form-urlencoded)に適しています。

一方、rawurlencode関数は、スペースを %20 と変換します。これはRFC 3986で定義されるURIの標準に厳密に準拠し、URLのパスやクエリパラメータの値をエンコードする際に適しています。

サンプルコードは、同じ文字列がこれら二つの関数でどのように異なる結果となるか、特にスペースの扱いを明確に示しています。用途に応じて適切なエンコード関数を選択しましょう。

このサンプルコードは、urlencoderawurlencodeの主な違いであるスペースのエンコード方法を明確に示しています。urlencodeはHTMLフォームのデータ送信に適しており、スペースを+に変換します。対してrawurlencodeはURIのパスやクエリパラメータの値に適しており、RFC 3986に則りスペースを%20に変換します。初心者の方は、URLのどの部分をエンコードしたいかで関数を使い分けることが重要です。誤った使い方をすると、リンクが動作しなかったり、データが正しく渡らない原因となります。また、両関数はそれぞれ対応するデコード関数とセットで利用することで、元の文字列を正確に復元できます。

rawurlencodeとurlencodeの違いを理解する

1<?php
2
3/**
4 * rawurlencode() と urlencode() の違いを理解するためのサンプルコード
5 *
6 * この関数は、特殊文字やスペースを含む文字列を、
7 * rawurlencode() 関数と urlencode() 関数それぞれでエンコードし、
8 * その結果を比較して出力します。
9 * 主にスペースのエンコード結果の違いに注目することで、
10 * どちらの関数をいつ使うべきかを理解できます。
11 */
12function demonstrateUrlEncodingDifferences(): void
13{
14    // エンコードする元の文字列
15    // 半角スペース、特殊記号 (&, /, ?), 日本語を含めています。
16    $originalString = "Hello World! & Test/Path?param=値 日本語";
17
18    echo "元の文字列: " . $originalString . PHP_EOL . PHP_EOL;
19
20    // rawurlencode() を使用して文字列をエンコード
21    // この関数は、RFC 3986 (URIの一般構文) に従ってエンコードします。
22    // スペースは `%20` としてエンコードされます。
23    // URIのパスやクエリパラメータの一部をエンコードするのに適しています。
24    $rawEncodedString = rawurlencode($originalString);
25    echo "rawurlencode() でエンコードした結果:" . PHP_EOL;
26    echo $rawEncodedString . PHP_EOL;
27    echo "補足: rawurlencode() は RFC 3986 に準拠し、スペースを `%20` とエンコードします。" . PHP_EOL . PHP_EOL;
28
29    // urlencode() を使用して文字列をエンコード
30    // この関数は、application/x-www-form-urlencoded 形式 (HTMLフォームのデータ) に従ってエンコードします。
31    // スペースは `+` (プラス記号) としてエンコードされます。
32    // HTMLフォームから送信されるデータをエンコードするのに適しています。
33    $urlEncodedString = urlencode($originalString);
34    echo "urlencode() でエンコードした結果:" . PHP_EOL;
35    echo $urlEncodedString . PHP_EOL;
36    echo "補足: urlencode() は application/x-www-form-urlencoded に準拠し、スペースを `+` とエンコードします。" . PHP_EOL . PHP_EOL;
37
38    echo "--- 主な違いのまとめ ---" . PHP_EOL;
39    echo "rawurlencode: スペースを `%20` にエンコードします。URIの構成要素に適しています。" . PHP_EOL;
40    echo "urlencode:    スペースを `+` にエンコードします。HTMLフォームのデータに適しています。" . PHP_EOL;
41}
42
43// 関数を実行して、エンコード結果を表示します。
44demonstrateUrlEncodingDifferences();
45
46?>

PHPのrawurlencode関数は、URLに含めることができない特殊文字や半角スペースを含む文字列を、安全に扱える形式に変換(エンコード)するために使用されます。引数にはエンコードしたい文字列をstring型で渡し、戻り値としてエンコードされたstring型の文字列を返します。

この関数は、URI(Uniform Resource Identifier)の一般構文を定めたRFC 3986のルールに厳密に従ってエンコードを行います。具体的には、半角スペースを%20という形式に変換し、日本語などのマルチバイト文字や一部の特殊記号も%XX形式でエンコードします。主にURLのパス部分やクエリパラメータの値の一部として、ブラウザやサーバー間でデータを正確にやり取りする際に適しています。

PHPには類似のurlencode関数もありますが、両者には重要な違いがあります。urlencode関数はHTMLフォームデータの送信形式であるapplication/x-www-form-urlencodedのルールに従い、半角スペースを+(プラス記号)にエンコードします。そのため、rawurlencodeはURIの構成要素に、urlencodeはHTMLフォームから送信されるデータなど、それぞれの用途に応じて使い分ける必要があります。サンプルコードでは、この半角スペースのエンコード結果の違いを通じて、両関数の適切な利用シーンを理解することができます。

このサンプルコードは、URLエンコードを行うrawurlencode()urlencode()の重要な違いを示しています。特に注意すべきは、半角スペースのエンコード結果です。rawurlencode()はスペースを%20としてエンコードし、RFC 3986に準拠しているため、URIのパスやクエリパラメータの一部に適しています。一方、urlencode()はスペースを+としてエンコードし、application/x-www-form-urlencoded形式に準拠しているため、HTMLフォームから送信されるデータのエンコードに適しています。用途を誤ると、URLが正しく解釈されなかったり、データが正しく処理されなかったりする原因となります。自身の目的と用途に合わせて適切な関数を選択してください。エンコードされたデータを元に戻す場合は、対応するデコード関数(rawurldecode()またはurldecode())を必ず使用してください。

urlencodeとrawurlencodeの違いを確認する

1<?php
2
3/**
4 * urlencode() と rawurlencode() の違いを示すサンプルコードです。
5 * 主な違いは、スペースと特定の特殊文字のエンコード方法、
6 * そしてそれぞれが対象とする URL エンコーディングの標準にあります。
7 *
8 * @param string $inputString 比較のためにエンコードする文字列
9 * @return void
10 */
11function demonstrateUrlEncodingDifferences(string $inputString): void
12{
13    echo "オリジナル文字列: " . $inputString . PHP_EOL;
14    echo str_repeat('-', 50) . PHP_EOL;
15
16    // urlencode() を使用して文字列をエンコードします。
17    // スペースは '+' にエンコードされます。
18    // これは主に HTML フォームデータ (application/x-www-form-urlencoded) のエンコードに適しています。
19    $encodedWithUrlencode = urlencode($inputString);
20    echo "urlencode() の結果:    " . $encodedWithUrlencode . PHP_EOL;
21
22    // rawurlencode() を使用して文字列をエンコードします。
23    // スペースは '%20' にエンコードされます。
24    // これは主に RFC 3986 で定義されている URL のパスセグメントのエンコードに適しています。
25    $encodedWithRawurlencode = rawurlencode($inputString);
26    echo "rawurlencode() の結果: " . $encodedWithRawurlencode . PHP_EOL;
27
28    echo str_repeat('-', 50) . PHP_EOL;
29    echo "主な違い:" . PHP_EOL;
30    echo " - スペースの扱い: urlencode() は '+' にエンコードし、rawurlencode() は '%20' にエンコードします。" . PHP_EOL;
31    echo " - 適用される標準: urlencode() は主にフォームデータに、rawurlencode() は RFC 3986 (URL パス) に適しています。" . PHP_EOL;
32}
33
34// --- サンプル実行 ---
35
36// ケース1: スペースとアポストロフィを含む文字列
37$testString1 = "Hello World! It's great.";
38echo "--- テストケース 1: スペースとアポストロフィ ---" . PHP_EOL;
39demonstrateUrlEncodingDifferences($testString1);
40echo PHP_EOL;
41
42// ケース2: '+' 記号と '/' スラッシュを含む文字列
43// '+' 記号は urlencode() と rawurlencode() の両方で '%2B' にエンコードされます。
44// これは、urlencode() がスペースを '+' にマッピングする動作とは異なります。
45$testString2 = "Search with + signs and / slashes.";
46echo "--- テストケース 2: '+' 記号と '/' スラッシュ ---" . PHP_EOL;
47demonstrateUrlEncodingDifferences($testString2);
48echo PHP_EOL;
49
50?>

PHPのrawurlencode関数は、ウェブアドレス(URL)に含めることができない特殊文字や日本語などの文字列を、安全に送信できるようエンコードする際に使用します。引数としてエンコードしたい文字列(string $string)を受け取り、エンコードされた文字列(string)を返します。

この関数は、同じくURLエンコードを行うurlencode関数とよく比較されますが、主な違いはスペースの扱いにあります。rawurlencodeはスペースを%20としてエンコードするのに対し、urlencodeはスペースを+としてエンコードします。これは、rawurlencodeがRFC 3986で定義されているURLのパスセグメントのエンコードに適しているためです。一方、urlencodeは主にHTMLフォームデータのapplication/x-www-form-urlencoded形式のエンコードに適しています。

サンプルコードでは、"Hello World! It's great.""Search with + signs and / slashes."のような文字列を例に、urlencoderawurlencodeのエンコード結果がどのように異なるかを示しています。特にスペースや+記号といった文字が、それぞれの関数でどのように変換されるかを具体的に確認でき、用途に応じた関数の使い分けの重要性が理解できます。

rawurlencodeはURLパス向けでスペースを%20に、urlencodeはHTMLフォームデータ向けでスペースを+にエンコードします。この用途の違いが最も重要ですので、利用シーンに合わせて適切に使い分けてください。文字列中の+記号は、両関数ともに%2Bにエンコードされます。エンコードを間違えると、URLが正しく機能しなかったり、データが破損したりする原因となります。エンコードしたデータは、必ず対応するデコード関数で元に戻す必要があります。

関連コンテンツ

関連IT用語

関連プログラミング言語