JpGraph中文乱码问题
JpGraph是一个PHP的图形类库,可以方便地生成各种柱状图,饼图,折线图等等,而且还可以方便地加文字。但是,中文的情况就稍微麻烦了一点。在JpGraph中默认是要把字符串转成utf8的,但是如果你的文件本身就是utf8的,并且要用中文字体,它还会转一遍,结果多转了一次,就会出现乱码。
除了编码问题,还有就是字体问题。为了试验中文显示,专门拷了一个simsun.ttc过来是,在代码里用FF_SIMSUN就可以正确显示中文,但是如果改用自己设置的FF_CHINESE,也就是uming.ttf,就又乱码了,而且和simsun.ttf乱码时的不一样。 后来发现FF_CHINESE和FF_BIG5是一样,是繁体字体,所以和用FF_SIMSUN的乱码还不一样。
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行之间的:
elseif( $aFF === FF_SIMSUN ) {
// Do Chinese conversion
if( $this->g2312 == null ) {
include_once 'jpgraph_gb2312.php' ;
$this->g2312 = new GB2312toUTF8();
}
return $this->g2312->gb2utf8($aTxt);
}
注释掉已有代码,直接返回$aTxt:
elseif( $aFF === FF_SIMSUN ) {
// Do Chinese conversion
//if( $this->g2312 == null ) {
// include_once 'jpgraph_gb2312.php' ;
// $this->g2312 = new GB2312toUTF8();
//}
//return $this->g2312->gb2utf8($aTxt);
return $aTxt;
}