update page now

Преобразующие фильтры

Как и фильтры 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

Работа decode-версии этого фильтра эквивалентна обработке всех данных потока функцией quoted_printable_decode(). У фильтра convert.quoted-printable-encode нет эквивалентной функции. Фильтр convert.quoted-printable-encode поддерживает аргументы, которые передали как ассоциативный массив. В дополнение к аргументам, которые поддерживает фильтр convert.base64-encode, фильтр convert.quoted-printable-encode также поддерживает boolean-аргументы 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. */
Добавить

Примечания пользователей 1 note

up
0
marcus at synchromedia dot co dot uk
3 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