程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 【原創】jpgraph中文亂碼問題的解決

【原創】jpgraph中文亂碼問題的解決

編輯:關於PHP編程

php jpgraph庫非常強大,可以在後台生成圖片

後台生成在需要導出圖表型報告的時候非常有用,當然,前端的可視化還是要用highcharts/echarts/anycharts等類庫

比較麻煩的是中文亂碼問題,有3個地方亂碼:

  • legend
  • setStickLabels
  • title

先說明下我的環境和版本:

  • Ubuntu12.04
  • PHP 5.3.10-1
  • Jpgraph 3.5.0b1
  • 文件fileencoding=utf-8

Legend 亂碼

  //jpgraph_legend.inc.php
  3 class Legend {
  2     public $txtcol=array();
  1     //public $font_family=FF_DEFAULT,$font_style=FS_NORMAL,$font_size=8; // old. 12
  0     public $font_family=FF_SIMSUN,$font_style=FS_NORMAL,$font_size=8; // old. 12

記得下載一份 simsun.ttc 放到 /usr/share/fonts/truetype

   //jpgraph_ttf.inc.php
  9         elseif( $aFF === FF_SIMSUN ) {
  8             // Do Chinese conversion 
  7             /*
  6             if( $this->g2312 == null ) {
  5                 include_once 'jpgraph_gb2312.php' ;
  4                 $this->g2312 = new GB2312toUTF8();
  3             }
  2             return $this->g2312->gb2utf8($aTxt);
  1              */
  0             return $aTxt;
1 }

原創文章,轉載請注明:http://www.cnblogs.com/phpgcs/

上面的解決方法,我是參考了:

http://blog.csdn.net/yiping1980/article/details/6023144

然後後面的2個我認為就是找到title/stickLabels源碼的地方,將 FFDEFAULT 改為 FFSIMSUN 即可

後來證明果然是這樣,而且方便的是 這2個家伙都在 jpgraph.php 文件中

直接

:%s/FF_DEFAULT/FF_SIMSUN/g

就搞定了

title 亂碼

  2         $this->title = new Text();
  1         $this->title->ParagraphAlign('center');
  0         //$this->title->SetFont(FF_DEFAULT,FS_NORMAL); //FF_FONT2, FS_BOLD
1 $this->title->SetFont(FF_SIMSUN,FS_NORMAL); //FF_FONT2, FS_BOLD

stickLables 亂碼

  5 class AxisPrototype {
  4     public $scale=null;
  3     public $img=null;
  2     public $hide=false,$hide_labels=false;
  1     public $title=null;
  0     public $font_family=FF_DEFAULT,$font_style=FS_NORMAL,$font_size=8,$label_angle=0;

還有個地方也有FF_DEFAULT,

  5 class DisplayValue {
  4     public $margin=5;
  3     public $show=false;
  2     public $valign='',$halign='center';
  1     public $format='%.1f',$negformat='';
  0     private $ff=FF_DEFAULT,$fs=FS_NORMAL,$fsize=8;

總結:

  • 找到相關的源碼(FF_DEFAULT)
  • 修改 jpgraphttf.inc.php, $aFF === FFSIMSUN 則直接返回 $aTx

原創文章,轉載請注明:http://www.cnblogs.com/phpgcs/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved