解決策は非常に複雑です。
ソリューションには 3 つの部分があります。 パート 1: FPDF 中国語プラグインをインストールする パート 2: NCR 形式を UTF-8 に変換する パート 3: UTF-8 形式を BIG5 (または任意のターゲット エンコーディング) に変換する
パート1
ここから FPDF 中国語プラグインを取得しました: http://dev.xoofoo.org/modules/content/d1/d6e/a00073.html
FPDF で漢字を表示するために使用され、必要なすべての中国語フォントを取得します。このプラグインをインストールするには、PHP に含めるだけです。(ただし、私の場合は、CellPDF という名前の別のプラグインを使用していますが、このプラグインはこの中国語のプラグインでクラッシュします。したがって、コードをマージして競合を解決する必要があります)
パート2
NCR 形式を UTF-8 に変換するには、次のコードを使用します。
function html_entity_decode_utf8($string)
{
static $trans_tbl;
// replace numeric entities
$string = preg_replace('~&#x([0-9a-f]+);~ei', 'code2utf(hexdec("\\1"))', $string);
$string = preg_replace('~&#([0-9]+);~e', 'code2utf(\\1)', $string);
// replace literal entities
if (!isset($trans_tbl))
{
$trans_tbl = array();
foreach (get_html_translation_table(HTML_ENTITIES) as $val=>$key)
$trans_tbl[$key] = utf8_encode($val);
}
return strtr($string, $trans_tbl);
}
function code2utf($num)
{
if ($num < 128) return chr($num);
if ($num < 2048) return chr(($num >> 6) + 192) . chr(($num & 63) + 128);
if ($num < 65536) return chr(($num >> 12) + 224) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
if ($num < 2097152) return chr(($num >> 18) + 240) . chr((($num >> 12) & 63) + 128) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
return '';
}
これは php.net の laurynas butkus によって書かれています (リンク: http://www.php.net/manual/en/function.html-entity-decode.php ) ただし、このコード自体は NCR 形式を「モンスター キャラクター」に変換します。 "、良いスタートであることはわかっています。
パート 3
php.net を深く掘り下げた後、エンコーディングを変換するための素晴らしい関数 iconv を見つけました。したがって、上記のコードを次の関数でラップします。
function ncr_decode($string, $target_encoding='BIG5') {
return iconv('UTF-8', 'BIG5', html_entity_decode_utf8($string));
}
したがって、NCR 文字列の前の行を変換したい場合は、次の関数を実行するだけで済みます。
ncr_decode("這個一個例子");
ps デフォルトでは、ターゲット エンコーディングを BIG5 に設定します。
それでおしまい!