wrossmann/costrenc

流过滤器,用于动态转换字符编码

v1.0.0 2021-07-10 02:20 UTC

This package is auto-updated.

Last update: 2024-09-10 09:06:40 UTC


README

使用PHP的输入流将数据在飞行中转换编码。

要求

  • 需要安装 mbstring 扩展。

安装

composer install wrossmann/costrenc

使用

use wrossmann\Costrenc\Costrenc;

// 1. Define the filter parameters
class UTF16LEtoUTF8 extends Costrenc {
    protected $in_charset = 'UTF-16LE';
    protected $out_charset = 'UTF-8';
}

// 2. Open your stream
$fh = fopen('my_utf16_file.txt');

// 3. Append the filter
stream_filter_register('UTF16LEtoUTF8', 'UTF16LEtoUTF8');
stream_filter_append($fh, 'UTF16LEtoUTF8', STREAM_FILTER_READ);

// 4. Use the stream normally
while( $line = fgets($fh) ) {
  echo $line;
}

错误处理

在非常有限的情况下,此过滤器可以检测编码错误。当发生这种情况时,默认行为是抛出 E_USER_WARNING 并尽力转换后续数据的编码,但无法保证。

您可以通过覆盖 error_dispatch() 函数来覆盖此行为或更改消息发送方式,如下所示。

class UTF16LEtoUTF8 extends Costrenc {
    protected $in_charset = 'UTF-16LE';
    protected $out_charset = 'UTF-8';

    protected function raise_error($message) {
        thrown new \Exception($message);
    }	
}

话虽如此,值得注意的是,可靠地检测编码错误通常是不切实际的,并且此过滤器处理格式不正确的数据的方式与任何其他库大致相同。

YMMV