Base64 encode: примеры (PHP)

Функция base64_encode: кодирование данных в PHP
Раздел: Кодирование/декодирование
base64_encode(string $string): string

Функция base64_encode в PHP

Общее описание

Функция base64_encode в PHP преобразует любые бинарные данные или строку в текстовое представление, используя алгоритм кодирования Base64. Этот метод превращает данные в строку, состоящую из символов ASCII (A-Z, a-z, 0-9, +, / и = для дополнения), что делает их безопасными для передачи через протоколы, не предназначенные для бинарных данных (например, электронная почта, вставка в XML, JSON, URL-строки).

Когда используется
  • Передача файлов (например, изображений) в текстовых форматах (Data URL).
  • Кодирование данных для безопасной передачи в HTTP-запросах или хранения в текстовых файлах.
  • Создание токенов или подписей.
  • Интеграция с системами, требующими текстового представления бинарных данных.
Аргументы функции

Функция принимает всего один обязательный параметр:

  • $string (string): Входная строка или бинарные данные для кодирования.

Функция всегда возвращает закодированную строку или false в случае неудачи (хотя на практике неудача возможна только при нехватке памяти).

Простые примеры использования

Пример 1: Кодирование простой строки

Код:

<?
$str = 'Hello, World!';
$encoded = base64_encode($str);
echo $encoded;
?>

Результат:

SGVsbG8sIFdvcmxkIQ==
Пример 2: Кодирование строки с пробелами и спецсимволами

Код:

<?
$str = 'Test data: 123 & @#';
$encoded = base64_encode($str);
echo $encoded;
?>

Результат:

VGVzdCBkYXRhOiAxMjMgJiAj
Пример 3: Кодирование содержимого файла

Код:

<?
$fileContent = file_get_contents('small_image.png');
if ($fileContent !== false) {
    $encoded = base64_encode($fileContent);
    echo substr($encoded, 0, 50) . '...';
}
?>

Результат (первые 50 символов):

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADU... (остаток строки)

Похожие функции в PHP

Обратная функция для декодирования строки из формата Base64. Важно использовать ее с флагом strict, чтобы отбрасывать некорректные символы.

urlencode / rawurlencode

Предназначены для кодирования строк для использования в URL, заменяя небезопасные символы на %-последовательности. Не используются для кодирования бинарных данных как единого целого.

bin2hex

Конвертирует бинарные данные в шестнадцатеричное представление. Результат примерно в 2 раза длиннее исходных данных, в отличие от Base64, который увеличивает объем примерно на 33%.

Когда что использовать
  • base64_encode — для кодирования бинарных данных в текстовый формат (например, для вставки в JSON).
  • urlencode — для кодирования отдельных параметров в строке запроса URL.
  • bin2hex — для простого отображения бинарных данных в виде строки (например, для отладки), где важен читаемый шестнадцатеричный вид.

Аналоги функции в других языках

Base64 encode в Python

Используется модуль base64. В отличие от PHP, данные обычно передаются как байты.

Код:

import base64
str_data = 'Hello, World!'.encode('utf-8')
encoded = base64.b64encode(str_data)
print(encoded.decode('utf-8'))

Результат:

SGVsbG8sIFdvcmxkIQ==
JavaScript (Node.js / браузер)

В браузерах есть функции btoa() (для строк) и atob(). Они работают только с символами Latin1. Для Unicode требуется предварительное преобразование.

Код (браузер):

let str = 'Hello, World!';
let encoded = btoa(str);
console.log(encoded);

Результат:

SGVsbG8sIFdvcmxkIQ==

Base64 encode в MySQL

Имеется функция TO_BASE64() и обратная FROM_BASE64().

Код (SQL запрос):

SELECT TO_BASE64('Hello, World!');

Результат:

SGVsbG8sIFdvcmxkIQ==
Основные отличия от PHP 8

В PHP функция принимает и возвращает строковый тип. В Python и JavaScript (btoa) часто требуется явная работа с кодировками (UTF-8, Latin1). MySQL интегрирует кодирование прямо в СУБД.

Типичные ошибки и проблемы

Ожидание декодирования base64_decode без флага strict

Если строка содержит символы, не входящие в алфавит Base64, base64_decode может неявно их игнорировать, что приводит к неожиданным результатам.

Код:

<?
$corrupted = 'SGVsbG8sIFdvcmxkIQ==\n';
// Без флага strict
$decoded = base64_decode($corrupted);
echo $decoded;
?>

Результат (символ новой строки проигнорирован):

Hello, World!

Решение — использовать второй параметр:

<?
$decodedStrict = base64_decode($corrupted, true);
var_dump($decodedStrict); // Вернет false, так как строка содержит недопустимые символы
?>
Кодирование уже закодированных данных

Многократное применение функции не имеет практического смысла и лишь увеличивает объем данных.

Код:

<?
$str = 'data';
$doubleEncoded = base64_encode(base64_encode($str));
echo $doubleEncoded;
?>

Результат:

ZEdWemRIVmhiRzhnWkdWdGJ5QXg=

Изменения в последних версиях PHP

Функция base64_encode осталась стабильной и не претерпела значимых изменений в поведении или синтаксисе в PHP 7.x и PHP 8.x. Ее работа унифицирована и предсказуема. Основные улучшения в PHP 8 касаются общей производительности и обработки ошибок, но не специфичны для этой функции.

Расширенные примеры применения

Создание Data URL для изображения

Позволяет встраивать небольшие изображения прямо в HTML или CSS.

Код:

Пример php
<?
$imagePath = 'icon.png';
$imageData = file_get_contents($imagePath);
if ($imageData !== false) {
    $mimeType = mime_content_type($imagePath);
    $base64 = base64_encode($imageData);
    $dataUrl = 'data:' . $mimeType . ';base64,' . $base64;
    echo 'Icon';
}
?>
Кодирование для безопасной передачи в JSON

Перед отправкой бинарных данных через JSON API.

Код:

Пример php
<?
$binaryData = random_bytes(16); // Например, токен
$response = [
    'status' => 'success',
    'token' => base64_encode($binaryData)
];
echo json_encode($response);
?>

Результат:

{"status":"success","token":"q\/Z8p1Rj3Lv6wE9t2Yb4Cg=="}
Кодирование строки с URL-безопасным вариантом

Иногда требуется использовать результат в URL, где символы + и / могут быть проблемными. Их можно заменить.

Код:

Пример php
<?
$data = 'Hello, World!';
$base64 = base64_encode($data);
$urlSafe = str_replace(['+', '/', '='], ['-', '_', ''], $base64);
echo $urlSafe;
?>

Результат:

SGVsbG8sIFdvcmxkIQ
Работа с многострочными данными (MIME)

Функция сама не разбивает строку. Для соответствия MIME стандарту (максимум 76 символов в строке) можно использовать chunk_split().

Код:

Пример php
<?
$longText = str_repeat('Lorem ipsum dolor sit amet, ', 20);
$encoded = base64_encode($longText);
$mimeEncoded = chunk_split($encoded, 76, "\n");
echo $mimeEncoded;
?>

PHP base64_encode function comments

En
Base64 encode Encodes data with MIME base64