【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のどの部分をエンコードしたいかで関数を使い分けることが重要です。誤った使い方をすると、リンクが動作しなかったり、データが正しく渡らない原因となります。また、両関数はそれぞれ対応するデコード関数とセットで利用することで、元の文字列を正確に復元できます。

関連コンテンツ