devmastersbv / transcoder
更好的PHP编码转换
1.0.6
2016-05-04 14:55 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: 2024-09-12 01:04:48 UTC
README
从 ddeboer/transcoder
分支创建。
简介
这是一个围绕PHP的mb_convert_encoding
和iconv
函数的包装器。此库添加了
- 从
mb
到iconv
的回退支持,用于未知编码 - 将警告转换为适当的异常。
安装
推荐通过Composer安装Transcoder库
$ 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 }
要覆盖MbTranscoder或IconvTranscoder类(包括您自己的修改),请在首次调用Transcoder::create()之前使用以下命令
Transcoder::$iconvClass = "ddeboer\Transcoder\IconvTranscoder";
Transcoder::$mbClass = "ddeboer\Transcoder\MbTranscoder";
转换器回退
通常,mb_convert_encoding
比iconv
快。然而,由于iconv
支持的编码比mb_convert_encoding
多,因此将两者结合起来是合理的。
因此,从create()
返回的Transcoder