W3docs

quoted_printable_encode()

Статья о PHP-функции quoted_printable_encode(), которая кодирует строку в формат quoted-printable согласно MIME-стандарту RFC 2045.

PHP-функция quoted_printable_encode() кодирует 8-битную строку в строку формата quoted-printable — MIME-кодировку, определённую в RFC 2045. Quoted-printable сохраняет читаемость печатаемого ASCII-текста и при этом безопасно передаёт байты, которые могут быть искажены старыми 7-битными почтовыми системами — непечатаемые и не-ASCII-байты записываются в виде =XX, где XX — значение байта в шестнадцатеричном формате в верхнем регистре.

На этой странице описаны синтаксис, правила кодирования, выполняемые примеры (включая не-ASCII-символы и перенос длинных строк), типичные сценарии использования и способ обратного преобразования.

Синтаксис

quoted_printable_encode(string $string): string
ПараметрОписание
$string8-битная строка для кодирования.

Возвращаемое значение: версия $string, закодированная в формате quoted-printable.

Как работает кодирование

Почти все случаи охватывают три правила:

  • Печатаемые ASCII-символы остаются без изменений — буквы, цифры и большинство знаков пунктуации передаются как есть, поэтому текст в формате quoted-printable по-прежнему остаётся читаемым для человека.
  • Остальные байты заменяются на =XX — любой байт вне безопасного диапазона (управляющие символы, сам символ =, а также все байты выше 126, включая байты UTF-8 букв с диакритикой и не-латинских символов) записывается как знак равенства, за которым следуют две шестнадцатеричные цифры.
  • Длинные строки переносятся мягким переносом — строки ограничены 76 символами за счёт вставки «мягкого переноса строки»: символа = в конце, сразу за которым идёт перевод строки. Декодировщик его удаляет, поэтому содержимое не теряется.

Базовый пример

php— editable, runs on the server

Вывод:

Hello World!

Поскольку 'Hello World!' состоит исключительно из печатаемых ASCII-символов, вывод идентичен вводу — каждый символ подпадает под первое правило.

Кодирование не-ASCII-текста

Кодирование проявляется только тогда, когда строка содержит байты, небезопасные для 7-битной передачи, — например, буквы с диакритикой или специальные символы:

<?php
$string = 'Café costs £5';
echo quoted_printable_encode($string);
?>

Вывод:

Caf=C3=A9 costs =C2=A35

Здесь é — это два UTF-8-байта 0xC3 0xA9, закодированные как =C3=A9, а £0xC2 0xA3, закодированное как =C2=A3. Обычные ASCII-символы вокруг них остаются нетронутыми.

Мягкий перенос длинных строк

Если строка превышает 76 символов, функция вставляет мягкий перенос строки (= плюс перевод строки), чтобы вывод соответствовал ограничениям длины строки в электронной почте:

<?php
$string = str_repeat('abcdefghij', 9) . 'END';
echo quoted_printable_encode($string);
?>

Вывод:

abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcde=
fghijabcdefghijEND

Символ = перед переводом строки отмечает место переноса; декодировщик quoted-printable восстанавливает исходную одну строку.

Когда использовать

quoted_printable_encode() стоит применять, когда вы вручную формируете тело или заголовки электронного письма и вам нужно 7-битно-безопасное представление преимущественно текстового содержимого — например, при установке части Content-Transfer-Encoding: quoted-printable в MIME-сообщении. Это правильный выбор, когда данные являются преимущественно читаемым текстом с редкими специальными символами; для двоичных данных или данных, в основном состоящих из не-текстовых символов, кодирование base64 будет более компактным.

На практике большинство современных почтовых библиотек (PHPMailer, Symfony Mailer) применяют это кодирование автоматически, поэтому вы редко вызываете её напрямую — однако она незаменима при отладке или в низкоуровневых скриптах, формирующих сырые сообщения.

Обратное преобразование

Используйте quoted_printable_decode(), чтобы преобразовать строку из формата quoted-printable обратно в исходные 8-битные данные:

<?php
$encoded = quoted_printable_encode('Café costs £5');
echo quoted_printable_decode($encoded);
?>

Вывод:

Café costs £5

Связанные функции

Практика

Практика
Что делает функция quoted_printable_encode() в PHP?
Что делает функция quoted_printable_encode() в PHP?
Was this page helpful?