ホームページ  >  記事  >  バックエンド開発  >  PHPエンコード変換でgbkエンコードからutf8への変換を実現

PHPエンコード変換でgbkエンコードからutf8への変換を実現

WBOY
WBOYオリジナル
2016-07-25 08:53:491454ブラウズ
  1. class gb2utf8

  2. { // 変換される gb2312 文字列
  3. var $utf8; // 変換された utf8 文字列
  4. var $codetable;変換中に使用される gb2312 コード ファイルの配列
  5. var $errormsg; // 変換中のエラー メッセージ

  6. function gb2utf8($instr="")

  7. {
  8. $this- >gb=$instr;
  9. $this->setgb2312();
  10. ($this->gb=="")?0:$this->convert();
  11. }

  12. 関数 setgb2312( $instr="gb2312.txt")

  13. { // gb2312 コード ファイルを設定します。デフォルトは gb2312.txt です
  14. $tmp=@file($instr ); $tmp) {
  15. $this->errormsg="no gb2312";
  16. $this->codetable=array();
  17. while(list($key,$ value); tmp)) {
  18. $this->codetable[hexdec(substr($value,0,6))]=substr($value,7,6);
  19. }
  20. } //(Script Xuetangbbs.it-home. org)

  21. function Convert()

  22. { // gb2312 文字列を utf8 文字列に変換します。$gb は事前に設定する必要があります
  23. $this->utf8=" ";トリム($this->gb) || $this->errormsg!="") {
  24. return ($this->utf8=$this->errormsg);
  25. $str=$this- >gb;

  26. while($str) {

  27. if (ord(substr($str,0,1))>127)
  28. {
  29. $tmp =substr($str, 0,2);
  30. $str=substr($str,2,strlen($str));
  31. $tmp=$this->u2utf8(hexdec($this->codetable[hexdec (bin2hex($tmp)) )-0x8080]));
  32. for($i=0;$i$this->utf8.=chr(substr($tmp ,$i,3) );
  33. }
  34. else
  35. {
  36. $tmp=substr($str,1,strlen($str)); tmp;
  37. }
  38. }
  39. return $this->utf8;
  40. }

  41. function u2utf8($instr)

  42. {
  43. for($i=0;$ i$str="";
  44. if ($instr < 0x80) {
  45. $str.=ord($instr);
  46. }
  47. else if ($instr < 0x800 ) {
  48. $str. =(0xc0 | $instr>>6);
  49. $str.=(0x80 | $instr & 0x3f)
  50. }
  51. else if ($instr $str.= (0xe0 | $instr> >12);
  52. $str.=(0x80 | $instr>6 & 0x3f);
  53. $str.=(0x80 | $instr & 0x3f);
  54. else if ($instr < 0x200000)
  55. $str.=(0xf0 | $instr>>18);
  56. $str.=(0x80 | $instr>>12 & 0x3f); );
  57. $str.=(0x80 | $instr & 0x3f);
  58. }
  59. return $str;
  60. }
  61. ?

  62. テスト例:
  63. //phpエンコード変換
  64. header("content-type: image/png");
  65. $im = imagecreate(400,300);
  66. $black = imagecolorallocate($im, 0, 0,0);
  67. $white = imagecolorallocate($im, 184,44,6);
  68. $obj=new gb2utf8();中国 456def テストは正しいです";
$obj->convert();
imagettftext($im, 20, 0, 5, 50, $white, "simkai.ttf", $obj->utf8); imagepng ( $im); imagedestroy($im);

コードをコピー
    フォント ファイルを正しく設定する必要があります。まず、フォントを使用して (gb2utf8 を使用せずに) 直接英語を出力できることを確認してください。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。