PHP JpGraph中文乱码
在使用JpGraph的时候我一般是把它的类库放到了程序的根目录下面
(解压之后的src中的文件,除了Examples文件夹之外)在用的时候只需要include就可以了
还可以将解压之后的src中的文件重命名为jpgraph,将它放到d盘,再在php.ini文件中添加到include_path中,
我的如下:
include_path = ".;c:\php\includes;d:\wamp\library;d:\jpgraph"
中文乱码
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。我的JpGraph为3.0.7版本,大概在178到186行之间的代码改为如下:
elseif( $aFF === FF_SIMSUN ) {
// Do Chinese conversion
return $aTxt;
}
但是我还是不喜欢改动源码,可以用iconv("UTF-8","GB2312//IGNORE","简体中文繁體中文 test")函数
先将要显示的字转换为GB2312。
右上角的那些中文显示有点难度,因为那个类没有SetFont方法,也就是说那东西是不能显示中文的。所以我
就改了基础类库
修改了jpgraph_legend.inc.php文件里的。
class Legend 类中有这样一句
private $font_family=FF_FONT1,$font_style=FS_NORMAL,$font_size=12;
我把他改为
private $font_family=FF_SIMSUN,$font_style=FS_NORMAL,$font_size=8;
就OK了。
Vendor('Jpgraph.jpgraph'); //导入图表类
Vendor('Jpgraph.jpgraph_pie');
$data = array(40, 60, 21, 33, 12, 33); // 初始数据
$notes=array("大饼一","大饼二","大饼三","大饼四","大饼五","大饼六");
foreach($notes as $key=>$value) {
$notes[$key]=iconv("UTF-8", "gb2312", $value);
}
$graph = new PieGraph(500, 400); // 创建一个新图和尺寸
$graph->SetShadow(); // 创建初始化
$title = "LOTO 在线统计";
$content = iconv("UTF-8", "gb2312", $title);
$graph->title->SetFont(FF_SIMSUN, FS_BOLD); //设置字体类型
$graph->title->Set($content); // 设置图片头部文字
$p1 = new PiePlot($data); // 实例化饼图并载入初始数据
$p1->SetTheme("sand"); //设置样式
$p1->SetCenter(0.5, 0.55); //设置饼图位置
$graph->legend->SetFont(FF_SIMSUN,FS_NORMAL);
$p1->SetLegends($notes);
$p1->value->Show(true); // 是否输出值
$graph->Add($p1); // 增加合并样式
$graph->Stroke(); //输出

浙公网安备 33010602011771号