wrossmann / costrenc
流过滤器,用于动态转换字符编码
v1.0.0
2021-07-10 02:20 UTC
Requires
- ext-mbstring: *
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