附录 M. 可用过滤器列表

下面列出了用在 stream_filter_append() 中的几个内置的流过滤器。用户的 PHP 版本中的过滤器也许比这里列出的更多(或更少)。

值得指出 stream_filter_append()stream_filter_prepend() 之间有少许不平衡。每个 PHP 流都含有一个小的读取缓冲区,它存储了来自文件系统或其它资源的几段数据以便更有效率地处理。数据一从资源进入流的内部缓冲区,立刻被附上的过滤器处理而不管 PHP 程序是否真的已经准备好接收数据。当过滤器是 appended 时如果数据等待在读取缓冲区,数据将被立即通过过滤器处理,使其效果看上去是透明的。然而当过滤器是 prepended 时如果数据等待在读取缓冲区,数据将不会被该过滤器处理。该数据将会等到从资源取得下一段数据后才会被处理。

stream_get_filters() 来列出 PHP 中已安装的过滤器。

字符串过滤器

每个过滤器都正如其名字暗示的那样工作并与内置的 PHP 字符串函数的行为相对应。对于指定过滤器的更多信息,请参考该函数的手册页。

string.rot13(自 PHP 4.3.0 起)使用此过滤器等同于用 str_rot13() 函数处理所有的流数据。

例子 M-1. string.rot13

<?php
$fp
= fopen('php://output', 'w');
stream_filter_append($fp, 'string.rot13');
fwrite($fp, "This is a test.\n");
/* Outputs:  Guvf vf n grfg.   */
?>

string.toupper(自 PHP 5.0.0 起)使用此过滤器等同于用 strtoupper() 函数处理所有的流数据。

例子 M-2. string.toupper

<?php
$fp
= fopen('php://output', 'w');
stream_filter_append($fp, 'string.toupper');
fwrite($fp, "This is a test.\n");
/* Outputs:  THIS IS A TEST.   */
?>

string.tolower(自 PHP 5.0.0 起)使用此过滤器等同于用 strtolower() 函数处理所有的流数据。

例子 M-3. string.tolower

<?php
$fp
= fopen('php://output', 'w');
stream_filter_append($fp, 'string.tolower');
fwrite($fp, "This is a test.\n");
/* Outputs:  this is a test.   */
?>

string.strip_tags(自 PHP 5.0.0 起)使用此过滤器等同于用 strip_tags() 函数处理所有的流数据。可以用两种格式接收参数:一种是和 strip_tags() 函数第二个参数相似的一个包含有标记列表的字符串,一种是一个包含有标记名的数组。

例子 M-4. string.strip_tags

<?php
$fp
= fopen('php://output', 'w');
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, "<b><i><u>");
fwrite($fp, "<b>bolded text</b> enlarged to a <h1>level 1 heading</h1>\n");
fclose($fp);
/* Outputs:  <b>bolded text</b> enlarged to a level 1 heading   */

$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, array('b','i','u'));
fwrite($fp, "<b>bolded text</b> enlarged to a <h1>level 1 heading</h1>\n");
fclose($fp);
/* Outputs:  <b>bolded text</b> enlarged to a level 1 heading   */
?>