• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
百分百
http://www.qrw100.com
博客园    首页    新随笔    联系   管理    订阅  订阅

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(); //输出

posted @ 2012-01-05 14:08  爱尚美  阅读(758)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3