class gb2utf8 - { // 変換される gb2312 文字列
- var $utf8; // 変換された utf8 文字列
- var $codetable;変換中に使用される gb2312 コード ファイルの配列
- var $errormsg; // 変換中のエラー メッセージ
function gb2utf8($instr="")
- {
- $this- >gb=$instr;
- $this->setgb2312();
- ($this->gb=="")?0:$this->convert();
- }
-
関数 setgb2312( $instr="gb2312.txt")
- { // gb2312 コード ファイルを設定します。デフォルトは gb2312.txt です
- $tmp=@file($instr ); $tmp) {
- $this->errormsg="no gb2312";
- $this->codetable=array();
- while(list($key,$ value); tmp)) {
- $this->codetable[hexdec(substr($value,0,6))]=substr($value,7,6);
- }
- } //(Script Xuetangbbs.it-home. org)
function Convert()
- { // gb2312 文字列を utf8 文字列に変換します。$gb は事前に設定する必要があります
- $this->utf8=" ";トリム($this->gb) || $this->errormsg!="") {
- return ($this->utf8=$this->errormsg);
- $str=$this- >gb;
while($str) {
- if (ord(substr($str,0,1))>127)
- {
- $tmp =substr($str, 0,2);
- $str=substr($str,2,strlen($str));
- $tmp=$this->u2utf8(hexdec($this->codetable[hexdec (bin2hex($tmp)) )-0x8080]));
- for($i=0;$i$this->utf8.=chr(substr($tmp ,$i,3) );
- }
- else
- {
- $tmp=substr($str,1,strlen($str)); tmp;
- }
- }
- return $this->utf8;
- }
function u2utf8($instr)
- {
- for($i=0;$ i$str="";
- if ($instr < 0x80) {
- $str.=ord($instr);
- }
- else if ($instr < 0x800 ) {
- $str. =(0xc0 | $instr>>6);
- $str.=(0x80 | $instr & 0x3f)
- }
- else if ($instr $str.= (0xe0 | $instr> >12);
- $str.=(0x80 | $instr>6 & 0x3f);
- $str.=(0x80 | $instr & 0x3f);
- else if ($instr < 0x200000)
- $str.=(0xf0 | $instr>>18);
- $str.=(0x80 | $instr>>12 & 0x3f); );
- $str.=(0x80 | $instr & 0x3f);
- }
- return $str;
- }
- ?
-
-
-
- テスト例:
-
-
-
-
-
- //phpエンコード変換
- header("content-type: image/png");
- $im = imagecreate(400,300);
- $black = imagecolorallocate($im, 0, 0,0);
- $white = imagecolorallocate($im, 184,44,6);
- $obj=new gb2utf8();中国 456def テストは正しいです";
$obj->convert(); imagettftext($im, 20, 0, 5, 50, $white, "simkai.ttf", $obj->utf8); imagepng ( $im); imagedestroy($im);
コードをコピー
フォント ファイルを正しく設定する必要があります。まず、フォントを使用して (gb2utf8 を使用せずに) 直接英語を出力できることを確認してください。
-
-
-
-
-
-
-
-
-
-
-
|