JpGraph是一个PHP的图形类库,可以方便地生成各种柱状图,饼图,折线图等等,而且还可以方便地加文字。但是,中文的情况就稍微麻烦了一点。在JpGraph中默认是要把字符串转成utf8的,但是如果你的文件本身就是utf8的,并且要用中文字体,它还会转一遍,结果多转了一次,就会出现乱码。

除了编码问题,还有就是字体问题。为了试验中文显示,专门拷了一个simsun.ttc过来是,在代码里用FF_SIMSUN就可以正确显示中文,但是如果改用自己设置的FF_CHINESE,也就是uming.ttf,就又乱码了,而且和simsun.ttf乱码时的不一样。 后来发现FF_CHINESE和FF_BIG5是一样,是繁体字体,所以和用FF_SIMSUN的乱码还不一样。

解决以上问题的方法也就是传递正确的中文字符串给JpGraph,所以可以把字符串先转成gb2312的,这样JpGraph就可以正确转换了。当然,这个方法比较麻烦,每次都需要,还可以直接修改jpgraph_ttf.inc.php,我用的是2.2版本的,大概在99到106行之间的:

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

注释掉已有代码,直接返回$aTxt:

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

这样就可以“一劳永逸”了。

http://blog.joypig.org/archives/179