Quoted printable encode: примеры (PHP)
quoted_printable_encode(string $string): stringФункция quoted_printable_encode
Функция quoted_printable_encode() конвертирует строку в формат Quoted-Printable, как определено в RFC 2045. Этот стандарт кодирования данных используется, в первую очередь, для передачи текста по электронной почте (в MIME-сообщениях), где необходимо сохранить читаемость текста для ASCII-символов и безопасно закодировать не-ASCII символы (например, кириллицу или спецсимволы).
Функция принимает всего один обязательный параметр:
- string – исходная строка, которую необходимо закодировать.
Она возвращает закодированную строку или false в случае ошибки.
Примеры использования
Кодирование строки с русскими символами:
$text = "Привет, мир!";
echo quoted_printable_encode($text);=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82, =D0=BC=D0=B8=D1=80!
Функция автоматически добавляет мягкие переносы строк (символ = в конце строки), если строка превышает длину 75 символов, как того требует стандарт.
$longText = str_repeat('a', 80) . 'б';
echo quoted_printable_encode($longText);aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa= =D0=B1
Альтернативные функции в PHP
Выполняет аналогичное кодирование Quoted-Printable. Может быть более предпочтительна при работе с модулем IMAP, но требует его наличия.
Может выполнять конвертацию в Quoted-Printable с указанием кодировки, но для этого строку нужно предварительно подготовить. Является частью модуля mbstring.
Используется для кодирования MIME-заголовков и может применять схему Quoted-Printable. Более сложная в использовании для кодирования тела сообщения.
Для простого кодирования тела письма или текстовых данных quoted_printable_encode() является наиболее прямой и удобной функцией, так как не требует дополнительных модулей.
Альтернативы в других языках
import quopri
text = "Привет".encode('utf-8')
encoded = quopri.encodestring(text)
print(encoded.decode('ascii'))=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82
Отличие: В Python модуль quopri работает с байтами, а не со строками.
const qp = require('qp-encoder');
const encoded = qp.encode('Привет');
console.log(encoded);=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82
В чистом JS нет встроенной функции, требуется сторонняя библиотека или реализация.
Функция QUOTE() в MySQL экранирует строку для SQL-запросов и не является аналогом Quoted-Printable кодирования. Прямого аналога в SQL нет.
Типичные ошибки
Некоторые разработчики ошибочно полагают, что функция может декодировать строку. Для декодирования предназначена quoted_printable_decode().
$encoded = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82";
$decoded = quoted_printable_encode($encoded); // Ошибка! Это не декодирует строку.
echo $decoded;=3DD0=3D9F=3DD1=3D80=3DD0=3DB8=3DD0=3DB2=3DD0=3DB5=3DD1=3D82
Повторное кодирование приводит к некорректным данным, так как символ = также будет закодирован.
Функция не принимает параметр кодировки. Она работает с байтовым представлением строки. Если строка сохранена в неправильной кодировке (не UTF-8), результат будет неверным.
Изменения в PHP 8
Начиная с PHP 8.2.0, функция quoted_printable_encode() больше не возвращает false в случае ошибки. Вместо этого она выбрасывает исключение типа ValueError, если переданный аргумент не является строкой. Это соответствует общей тенденции PHP к более строгой типизации.
// PHP < 8.2
$result = @quoted_printable_encode(null); // возвращает false
// PHP >= 8.2
$result = quoted_printable_encode(null); // Выбрасывает ValueErrorРасширенные примеры
$subject = "Тема письма с символами: & < >";
$body = "Это тело письма\nс переносами строк и кириллицей.";
$headers = "Content-Type: text/plain; charset=utf-8\r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable\r\n";
$encodedBody = quoted_printable_encode($body);
// В реальности $encodedBody будет подставлен в тело письма
echo $headers . "\n\n" . $encodedBody;Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable =D0=AD=D1=82=D0=BE =D1=82=D0=B5=D0=BB=D0=BE =D0=BF=D0=B8=D1=81=D1=8C=D0=BC=D0=B0 =D1=81 =D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D0=B0=D0=BC=D0=B8 =D1=81=D1=82=D1=80=D0=BE=D0=BA = =D0=B8 =D0=BA=D0=B8=D1=80=D0=B8=D0=BB=D0=BB=D0=B8=D1=86=D0=B5=D0=B9.
Quoted-Printable сохраняет читаемость для ASCII-текста, в отличие от Base64.
$englishText = "Hello, this is a simple ASCII text.";
echo 'QP: ' . quoted_printable_encode($englishText) . "\n\n";
echo 'B64: ' . base64_encode($englishText);QP: Hello, this is a simple ASCII text. B64: SGVsbG8sIHRoaXMgaXMgYSBzaW1wbGUgQVNDSUkgdGV4dC4=
Функция может работать с бинарными данными, но для них чаще используют base64_encode(), так как он эффективнее.
$binaryData = file_get_contents('small_image.png');
$encoded = quoted_printable_encode($binaryData);
echo 'Длина QP: ' . strlen($encoded) . "\n";
$encodedB64 = base64_encode($binaryData);
echo 'Длина B64: ' . strlen($encodedB64);Длина QP: 18348 Длина B64: 12232
PHP quoted_printable_encode function comments
- Php quoted printable encode - аргументы и возвращаемое значение
- Функция php quoted_printable_encode - описание
- quoted printable encode - примеры
- quoted printable encode - похожие методы на php
- quoted_printable_encode на js, python, mysql
- quoted printable encode изменения php
- Примеры quoted_printable_encode на php