はじめに
PHPのbase64_encode()関数は、バイナリデータを文字列として安全に扱うための関数です。しかし「%E3%… のような文字列が出力される」と誤解されがちです。
本記事では、random_bytes()と組み合わせたときの正しい動作と出力の仕組みをわかりやすく解説します。
目次
🧩 base64_encode()とは?
base64_encode() は、MIME Base64方式でデータをエンコードします。
主に「印字できないバイナリデータを、安全に文字列として扱う」ために使われます。
base64_encode(string $string): string🧠 コード例
<?php
declare(strict_types=1);
error_reporting(-1);
$r = random_bytes(16);
$b = base64_encode($r);
var_dump($b);実行結果例:
string(24) "u1w/6C3q8lK9B9dOuhkq8A=="random_bytes(16)は16バイトのランダムなバイナリデータを生成base64_encode()によってそれが 英数字+記号 に変換されます- 出力内容は毎回異なりますが、形式は常に Base64 です
🚫 よくある誤解:「%xx」形式は出ない
試験問題などで以下のように記載されていることがあります:
string(46) "%FB%98%E8%93FF%BD%E7%BD%E7%BD%3B%D998-%0026%E3%A7"これは URLエンコードされた表現(rawurlencode()などの結果)であり、base64_encode() の出力とは異なります。Base64の出力には % 記号は含まれません。
✅ 正しい出力イメージ
string(24) "A3pdwN8Lfr5uBfwZmW0SJQ=="構成文字:
A–Z,a–z,0–9,+,/,=(パディング用)- この文字集合で構成されるのがBase64の特徴です。
図解:データ変換の流れ
┌──────────────┐
│ random_bytes │ 生成(バイナリ): 16バイト
└──────┬───────┘
↓
┌───────────────────────────┐
│ base64_encode() │
│ バイナリ → Base64文字列 │
└──────┬────────────────────┘
↓
出力例:"u1w/6C3q8lK9B9dOuhkq8A=="🧾 まとめ
| 項目 | 内容 |
|---|---|
| 関数 | base64_encode(string $string): string |
| 目的 | バイナリデータをBase64形式の文字列に変換 |
| 出力形式 | 英数字+/+++= で構成される文字列 |
%xx形式 | ❌ URLエンコード表現。base64_encode()とは無関係 |
| 試験でのポイント | 「base64_encode()はURLエンコードではない」と覚える |
