ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹

Как ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ 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 ΒΆ
4 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.