Quoted printable decode: примеры (PHP)
quoted_printable_decode(string $string): stringОписание функции quoted_printable_decode
Функция quoted_printable_decode() в PHP преобразует строку из формата Quoted-Printable (QP) обратно в 8-битную строку. Этот формат кодирования часто применяется в электронной почте (MIME) для передачи двоичных данных через 7-битные каналы, сохраняя читаемость текста для систем, поддерживающих только ASCII.
Функция принимает единственный параметр:
- $string (string) – строка, закодированная по стандарту Quoted-Printable, которую необходимо декодировать.
Возвращает декодированную строку или false в случае ошибки (например, если передан некорректный QP-текст).
Краткие примеры использования
Строка, где символ равенства с последующими шестнадцатеричными цифрами представляет закодированный байт.
<?php
$encoded = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82";
echo quoted_printable_decode($encoded);
?>Привет
Символ равенства в конце строки (=) указывает на мягкий перенос, который удаляется при декодировании.
<?php
$encoded = "Это длинная строка, которая была разбита на несколько строк=\nв формате Quoted-Printable.";
echo quoted_printable_decode($encoded);
?>Это длинная строка, которая была разбита на несколько строк в формате Quoted-Printable.
Похожие функции в PHP
Выполняет обратное преобразование — кодирует строку в формат Quoted-Printable. Используется для подготовки данных к передаче, например, в теле email-сообщения.
Декодирует поле MIME-заголовка. Может работать с различными кодировками, включая Quoted-Printable и Base64. Более специализирована для разбора заголовков электронной почты.
Функция из модуля IMAP, также декодирующая строку из Quoted-Printable представления. Требует установленного модуля imap и часто используется при работе с почтовыми ящиками.
quoted_printable_decode является базовой функцией для общего случая декодирования QP-данных, в то время как iconv_mime_decode больше подходит для заголовков, а imap_qprint — в контексте обработки почты через IMAP.
Аналоги в других языках
Quoted printable decode в Python
Модуль quopri содержит функции decodestring() и decode(). В отличие от PHP, работа ведется с байтовыми строками.
import quopri
encoded = b"=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82"
decoded = quopri.decodestring(encoded)
print(decoded.decode('utf-8'))Привет
Можно использовать сторонние пакеты (например, quoted-printable). Нативная поддержка отсутствует.
const qp = require('quoted-printable');
const encoded = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82";
const decoded = qp.decode(encoded);
console.log(decoded); // ПриветQuoted printable decode в MySQL
Прямого аналога нет. Для декодирования потребуется создание пользовательской функции или обработка данных на уровне приложения.
Возможные ошибки
Если строка содержит неполные последовательности (например, один символ '=' в конце), они будут проигнорированы или обработаны некорректно.
<?php
$encoded = "Тест= "; // Пробел после '=' нарушает формат
echo quoted_printable_decode($encoded);
?>Тест=
Функция возвращает двоичные данные. Если исходная строка была в UTF-8, но результат интерпретируется как другая кодировка (например, Windows-1251), возникнут искажения.
<?php
$encoded = "=CF=F0=E8=E2=E5=F2"; // Кодировка Windows-1251
$decoded = quoted_printable_decode($encoded);
echo mb_detect_encoding($decoded) . "\n"; // Может быть определено неверно
?>Изменения в версиях PHP
В PHP 8.0 поведение функции было уточнено. Передача значения типа, отличного от строки, теперь вызывает ошибку TypeError. В предыдущих версиях такие аргументы преобразовывались в строку.
<?php
// PHP 7: преобразование массива в строку 'Array' и попытка декодирования.
// PHP 8: фатальная ошибка.
quoted_printable_decode([]);
?>Расширенные примеры
Декодирование текстовой части письма, закодированной в Quoted-Printable.
<?php
// Пример тела письма в QP
$emailBody = "Здравствуйте!=\nВот документ: =D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82.=\n=\nС уважением.";
$decodedBody = quoted_printable_decode($emailBody);
echo $decodedBody;
?>Здравствуйте! Вот документ: Документ. С уважением.
Декодирование строки с последующим приведением к нужной кодировке.
<?php
$encoded = "=CE=E4=E8=ED =E7=E0=EF=F0=EE=F1"; // Windows-1251: "Один запрос"
$decoded = quoted_printable_decode($encoded);
// Преобразуем в UTF-8, если известно, что исходная кодировка Windows-1251
$utf8 = mb_convert_encoding($decoded, 'UTF-8', 'Windows-1251');
echo $utf8; // Один запрос
?>Совместное использование с другими функциями для разбора заголовков.
<?php
$subject = "=?UTF-8?Q?=D0=A2=D0=B5=D0=BC=D0=B0_=D0=BF=D0=B8=D1=81=D1=8C=D0=BC=D0=B0?=";
// Сначала убираем префикс кодировки и декодируем
if (preg_match('/^=\?([^?]+)\?Q\?(.*)\?=$/i', $subject, $matches)) {
$decoded = quoted_printable_decode(str_replace('_', ' ', $matches[2]));
echo $decoded; // Тема письма
}
?>PHP quoted_printable_decode function comments
- Php quoted printable decode - аргументы и возвращаемое значение
- Функция php quoted_printable_decode - описание
- quoted printable decode - примеры
- quoted printable decode - похожие методы на php
- quoted_printable_decode на js, python, mysql
- quoted printable decode изменения php
- Примеры quoted_printable_decode на php