PHP 8.4.1 Released!

Фільтри перетворення

Як і фільтри string.*, фільтри convert.* виконують дії відповідно до своєї назви. Докладніша інформація щодо певного фільтру є на сторінці посібника для відповідної функції.

convert.base64-encode та convert.base64-decode

Використання цих фільтрів еквівалентне обробці всіх потокових даних функціями base64_encode() та base64_decode() відповідно. convert.base64-encode підтримує параметри у вигляді асоціативного масиву. Якщо дано line-length, то вивід base64 буде поділено на відрізки з довжиною line-length символів кожен. Якщо дано line-break-chars, то кожен відрізок буде розділений заданими символами. Ці памаметри дають той самий ефект при використанні base64_encode() із chunk_split().

Приклад #1 convert.base64-encode та convert.base64-decode

<?php
$fp
= fopen('php://output', 'w');
stream_filter_append($fp, 'convert.base64-encode');
fwrite($fp, "This is a test.\n");
fclose($fp);
/* Виводить: VGhpcyBpcyBhIHRlc3QuCg== */

$param = array('line-length' => 8, 'line-break-chars' => "\r\n");
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'convert.base64-encode', STREAM_FILTER_WRITE, $param);
fwrite($fp, "This is a test.\n");
fclose($fp);
/* ВИводить: VGhpcyBp
: cyBhIHRl
: c3QuCg== */

$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'convert.base64-decode');
fwrite($fp, "VGhpcyBpcyBhIHRlc3QuCg==");
fclose($fp);
/* Виводить: This is a test. */
?>

convert.quoted-printable-encode та convert.quoted-printable-decode

Використання фільтру для декодування еквівалентне обробці всіх потокових даних функцією quoted_printable_decode(). Немає еквівалентної функції до convert.quoted-printable-encode. convert.quoted-printable-encode підримує параметри, подані як асоціативний масив. В додаток до параметрів, підтримуваних фунцією convert.base64-encode, convert.quoted-printable-encode також підтримує логічні аргументи binary і force-encode-first. convert.base64-decode підтримує тільки параметр line-break-chars як підказку для очищення закодованих даних.

Приклад #2 convert.quoted-printable-encode та convert.quoted-printable-decode

<?php
$fp
= fopen('php://output', 'w');
stream_filter_append($fp, 'convert.quoted-printable-encode');
fwrite($fp, "This is a test.\n");
/* Виводить: =This is a test.=0A */
?>

convert.iconv.*

Фільтри convert.iconv.* доступні, якщо увімкнена підтримка iconv, а їхнє використання еквівалентне обробці всіх потокових даних функціями iconv(). Ці фільтри не підтримують параметрів, та натомість містять у своїх назвах кодування для вхідих і вихідних даних: convert.iconv.<input-encoding>.<output-encoding> або convert.iconv.<input-encoding>/<output-encoding> (обидва варіанти є семантично однаковими).

Приклад #3 convert.iconv.*

<?php
$fp
= fopen('php://output', 'w');
stream_filter_append($fp, 'convert.iconv.utf-16le.utf-8');
fwrite($fp, "T\0h\0i\0s\0 \0i\0s\0 \0a\0 \0t\0e\0s\0t\0.\0\n\0");
fclose($fp);
/* Виводить: This is a test. */
?>
add a note

User Contributed Notes 1 note

up
1
marcus at synchromedia dot co dot uk
2 years ago
It's not quite obvious what all the available parameters are for convert.quoted-printable-encode. If you want the stream filter to act the same way as the quoted_printable_encode function, you need these extra params, for example:

stream_filter_append(
STDOUT,
'convert.quoted-printable-encode',
STREAM_FILTER_WRITE,
[
'line-break-chars' => PHP_EOL,
'line-length' => 75,
]
);
echo stream_copy_to_stream(STDIN, STDOUT);

Without these extra params set, you may get no wrapping at all, or wrapping using the wrong line break sequence.
To Top