eugene-matvejev / transcoder
1.0.4
2015-08-18 17:31 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: ~4.0
Suggests
- ext-iconv: For using the IconvTranscoder
- ext-mbstring: For using the MbTranscoder
This package is not auto-updated.
Last update: 2016-06-21 15:17:07 UTC
README
简介
这是一个围绕PHP的 mb_convert_encoding 和 iconv 函数的包装器。此库添加了
- 从
mb到iconv的回退机制,以处理未知编码 - 将警告转换为适当的异常。
安装
安装Transcoder库的推荐方式是通过 Composer
$ composer require ddeboer/transcoder
此命令需要您全局安装Composer,如Composer文档中的 安装章节 所述。
用法
基础
为您的平台创建正确的转换器并转换一些字符串
use Ddeboer\Transcoder\Transcoder;
$transcoder = Transcoder::create();
$result = $transcoder->transcode('España');
您也可以手动实例化一个喜欢的转换器
use Ddeboer\Transcoder\MbTranscoder; $transcoder = new MbTranscoder();
或者
use Ddeboer\Transcoder\IconvTranscoder; $transcoder = new IconvTranscoder();
源编码
默认情况下,源编码会自动检测。但是,如果您明确指定它,您会得到更可靠的结果
$transcoder->transcode('España', 'iso-8859-1');
目标编码
将默认目标编码指定为 create() 的第一个参数
use Ddeboer\Transcoder\Transcoder;
$isoTranscoder = Transcoder::create('iso-8859-1');
或者,在 transcode() 调用中指定目标编码作为第三个参数
use Ddeboer\Transcoder\Transcoder;
$transcoder->transcode('España', null, 'UTF-8');
错误处理
PHP的 mb_convert_encoding 和 iconv 不太方便使用,因为它们生成通知和警告而不是适当的异常。此库解决了这个问题
use Ddeboer\Transcoder\Exception\UndetectableEncodingException;
use Ddeboer\Transcoder\Exception\UnsupportedEncodingException;
use Ddeboer\Transcoder\Exception\IllegalCharacterException;
$input = 'España';
try {
$transcoder->transcode($input);
} catch (UndetectableEncodingException $e) {
// Failed to automatically detect $input’s encoding
}
try {
$transcoder->transcode($input, null, 'not-a-real-encoding');
} catch (UnsupportedEncodingException $e) {
// ‘not-a-real-encoding’ is an unsupported encoding
}
try {
$transcoder->transcode('Illegal quotes: ‘ ’', null, 'iso-8859-1');
} catch (IllegalCharacterException $e) {
// Curly quotes ‘ ’ are illegal in ISO-8859-1
}
转换器回退
通常,mb_convert_encoding 比较快,但是,由于 iconv 支持比 mb_convert_encoding 更多的编码,因此将两者结合使用是有意义的。
因此,从 create() 返回的转换器