CakeFest 2024: The Official CakePHP Conference

Umwandlungsfilter

Wie die string.*-Filter führen auch die convert.*-Filter Aktionen aus, die ihren Namen entsprechen. Weitere Informationen zu einem bestimmten Filter sind auf der Handbuchseite für die entsprechende Funktion zu finden.

convert.base64-encode und convert.base64-decode

Die Verwendung dieser Filter entspricht der Verarbeitung aller Stream-Daten mit den Funktionen base64_encode() und base64_decode(). convert.base64-encode unterstützt Parameter, die als assoziatives Array übergeben werden. Wenn der Parameter line-length angegeben wird, wird die base64-Ausgabe in Abschnitte von line-length Zeichen aufgeteilt. Wenn der Parameter line-break-chars angegeben wird, werden die einzelnen Teilstücke durch die angegebenen Zeichen getrennt. Diese Parameter haben die gleiche Wirkung wie die Verwendung von base64_encode() in Verbindung mit chunk_split().

Beispiel #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);
/* Ausgabe: 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);
/* Ausgabe: VGhpcyBp
: cyBhIHRl
: c3QuCg== */

$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'convert.base64-decode');
fwrite($fp, "VGhpcyBpcyBhIHRlc3QuCg==");
fclose($fp);
/* Ausgabe: This is a test. */
?>

convert.quoted-printable-encode und convert.quoted-printable-decode

Die Verwendung der Decode-Version dieses Filters entspricht der Verarbeitung aller Stream-Daten mit der Funktion quoted_printable_decode(). Es gibt keine Funktion, die convert.quoted-printable-encode entspricht. convert.quoted-printable-encode unterstützt Parameter, die als assoziatives Array übergeben werden. Zusätzlich zu den Parametern, die von convert.base64-encode unterstützt werden, unterstützt convert.quoted-printable-encode auch die booleschen Parameter binary und force-encode-first. convert.base64-decode unterstützt nur den Parameter line-break-chars, der für die Zeilentrennung der kodierten Daten verwendet wird.

Beispiel #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");
/* Ausgabe: =This is a test.=0A */
?>

convert.iconv.*

Die convert.iconv.*-Filter sind verfügbar, wenn die iconv-Unterstützung aktiviert ist. Die Verwendung dieser Filter entspricht der Verarbeitung aller Stream-Daten mit der Funktion iconv(). Diese Filter unterstützen keine Parameter, sondern erwarten stattdessen, dass die Eingabe- und Ausgabekodierungen als Teil des Filternamens angegeben werden, d. h. entweder als convert.iconv.<input-encoding>.<output-encoding> oder als convert.iconv.<input-encoding>/<output-encoding> (beide Schreibweisen sind semantisch äquivalent).

Beispiel #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);
/* Ausgabe: This is a test. */
?>
add a note

User Contributed Notes 1 note

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