rsaccani/stream-decorators

此包已废弃,不再维护。未建议替代包。

PHP psr7 流装饰器,用于 MIME 消息部分流

0.1.0 2018-08-09 08:47 UTC

This package is not auto-updated.

Last update: 2022-04-11 23:11:36 UTC


README

字符集转换和常见邮件格式内容编码的 Psr7 流装饰器。

Build Status Code Coverage Scrutinizer Code Quality Total Downloads Latest Stable Version

本项目的目标是

  • 编写良好
  • 符合标准但宽容的
  • 可通过 composer 包含
  • 尽可能测试

要将其包含到您的项目中,请通过 composer 安装

composer require zbateson/stream-decorators

要求

StreamDecorators 需要 PHP 5.4 或更高版本或 HHVM。已在 travis 上测试 PHP 5.4、5.5、5.6、7、7.1 和 7.2 以及 HHVM 3.6、3.12、3.24 和 'current'。

使用方法

$stream = GuzzleHttp\Psr7\stream_for($handle);
$b64Stream = new ZBateson\StreamDecorators\Base64Stream($stream);
$charsetStream = new ZBateson\StreamDecorators\CharsetStream($b64Stream, 'UTF-32', 'UTF-8');

while (($line = GuzzleHttp\Psr7\readline()) !== false) {
    echo $line, "\r\n";
}

库包含以下 Psr\Http\Message\StreamInterface 实现

  • ZBateson\StreamDecorators\QuotedPrintableStream - 读取时解码,写入时编码为 quoted-printable
  • ZBateson\StreamDecorators\Base64Stream - 读取时解码,写入时编码为 base64
  • ZBateson\StreamDecorators\UUStream - 读取时解码,写入时编码为 uu-encoded
  • ZBateson\StreamDecorators\CharsetStream - 读取时从 $streamCharset 编码到 $stringCharset,写入时相反
  • ZBateson\StreamDecorators\NonClosingStream - 覆盖 close() 和 detach(),简单地取消绑定流而不关闭它
  • ZBateson\StreamDecorators\ChunkSplitStream - 将写入的字符分割成 $lineLength 长的行(php 的 chunk_split 流实现)
  • ZBateson\StreamDecorators\PregReplaceFilterStream - 在每次 read() 调用上使用传递的参数调用 preg_replace
  • ZBateson\StreamDecorators\SeekingLimitStream - 与 GuzzleHttp 的 LimitStream 类似,但维护内部当前读取位置,在 read() 调用中定位到它,并在读取后回到包装流的当前位置

QuotedPrintableStream、Base64Stream 和 UUStream 的构造函数接受一个 StreamInterface 参数。CharsetStreams 的构造函数也分别接受 $streamCharset 和 $stringCharset 作为参数,ChunkSplitStream 可选地接受一个 $lineLength 参数(默认为 76)和一个 $lineEnding 参数(默认为 CRLF)。PregReplaceFilterStream 接受一个 $pattern 参数和一个 $replacement 参数。SeekingLimitStream 接受可选的 $limit 和 $offset 参数,类似于 GuzzleHttp 的 LimitStream。

此外,该库还公开了一个 ZBateson\StreamDecorators\Util\CharsetConverter 类,它提供了以下功能

  • 支持的不同名称(别名)的字符集映射
  • 更好的字符集查找(在查找过程中删除特殊字符等),以捕获可能在 Content-Type 标头中找到的更多字符集
  • 以下 mb_* 和 iconv 函数的抽象,优先使用 mb_* 支持的字符集
  • mb_convert_encoding、iconv 使用 CharsetConverter::convert
  • mb_substr、iconv_substr 使用 CharsetConverter::getSubstr
  • mb_strlen、iconv_strlen 使用 CharsetConverter::getLength

许可

BSD 许可 - 请参阅 许可协议