转换过滤器

与 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 还支持布尔参数 binaryforce-encode-firstconvert.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.*

如果启用了 iconv 支持,则可以使用 convert.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 注释

marcus at synchromedia dot co dot uk
2 年前
convert.quoted-printable-encode 的所有可用参数并不十分清楚。如果您希望流过滤器与 quoted_printable_encode 函数的行为相同,则需要以下额外参数,例如

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);

如果没有设置这些额外的参数,您可能会根本没有包装,或者使用错误的换行符序列进行包装。
To Top