devmastersbv/transcoder

更好的PHP编码转换

1.0.6 2016-05-04 14:55 UTC

This package is not auto-updated.

Last update: 2024-09-12 01:04:48 UTC


README

ddeboer/transcoder 分支创建。

简介

这是一个围绕PHP的mb_convert_encodingiconv函数的包装器。此库添加了

  • mbiconv的回退支持,用于未知编码
  • 将警告转换为适当的异常。

安装

推荐通过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_encodingiconv使用不便,因为它们生成通知和警告而不是适当的异常。此库修复了这个问题

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_encodingiconv快。然而,由于iconv支持的编码比mb_convert_encoding多,因此将两者结合起来是合理的。

因此,从create()返回的Transcoder

  • 如果安装了mbstring PHP扩展,则使用mb_convert_encoding
  • 如果没有,则如果安装了iconv扩展,则使用iconv
  • 如果mbstring和iconv扩展都可用,则Transcoder将首先尝试mb_convert_encoding,然后回退到iconv