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| Параметр | Описание |
|---|---|
$string | 8-битная строка для кодирования. |
Возвращаемое значение: версия $string, закодированная в формате quoted-printable.
Как работает кодирование
Почти все случаи охватывают три правила:
- Печатаемые ASCII-символы остаются без изменений — буквы, цифры и большинство знаков пунктуации передаются как есть, поэтому текст в формате quoted-printable по-прежнему остаётся читаемым для человека.
- Остальные байты заменяются на
=XX— любой байт вне безопасного диапазона (управляющие символы, сам символ=, а также все байты выше 126, включая байты UTF-8 букв с диакритикой и не-латинских символов) записывается как знак равенства, за которым следуют две шестнадцатеричные цифры. - Длинные строки переносятся мягким переносом — строки ограничены 76 символами за счёт вставки «мягкого переноса строки»: символа
=в конце, сразу за которым идёт перевод строки. Декодировщик его удаляет, поэтому содержимое не теряется.
Базовый пример
Вывод:
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_decode()— декодирует строку в формате quoted-printable.utf8_encode()— преобразует строку ISO-8859-1 в UTF-8.utf8_decode()— преобразует строку UTF-8 в ISO-8859-1.