zoukankan      html  css  js  c++  java
  • JpGraph使用详解之中文乱码解决方法

    在前面的JpGraph使用详解这篇文章,已经对JpGraph的使用方法作了详细的交代,前面说好的,接下来解决中文乱码。

    JpGraph为什么会出现中文乱码

    在JpGraph中默认是要把字符串转成utf8的,但是如果你的文件本身就是utf8的,并且要用中文字体,它还会转一遍,结果多转了一次,就会出现乱码。如图所示

    解决中文乱码

    取前篇的代码片断如下

    //设置图表的标题字体、大小
    $graph->title->Set("Accumulated bar plots");
    $graph->xaxis->title->Set("X-title");
    $graph->yaxis->title->Set("Y-title");
    
    //和上面标题对应,设置标题的字体和大小
    $graph->title->SetFont(FF_FONT1,FS_BOLD);
    $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    

      

    把它改为

    //设置图表的标题字体、大小
    $graph->title->Set(iconv("UTF-8","GB2312//IGNORE","网志博客信息统计表"));
    $graph->xaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","X-标题"));
    $graph->yaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","Y-标题"));
    
    //和上面标题对应,设置标题的字体和大小
    $graph->title->SetFont(FF_SIMSUN,FS_BOLD);
    $graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
    $graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
    

      

    使用php函数据中文由UTF-8转为GB2312,记住由于iconv本身的一个bug,iconv在转换字符"—"到gb2312时会出错,所以在需要转成的编码后加上 "//IGNORE" 。

    FF_SIMSUN表示中文简体,对应的字体文件是simsun.ttc,虽然FF_CHINESE和FF_BIG5也表示中文但是它们对应的字体文件是不同的,所以不要弄错。

    下面是正确转换后生成的图

    下面是本例调试的完整代码

    require_once ('jpgraph/jpgraph.php');
    require_once ('jpgraph/jpgraph_bar.php');
    
    $data1y=array(0,8,9,3,5,6);
    $data2y=array(18,2,1,7,5,4);
    
    // Create the graph. These two calls are always required
    $graph = new Graph(500,400);
    $graph->SetScale("textlin");
    
    $graph->SetShadow();
    $graph->img->SetMargin(40,30,20,40);//设置图形的边距
    
    // Create the bar plots
    $b1plot = new BarPlot($data1y);
    $b1plot->SetFillColor("orange");
    $b1plot->value->Show();
    $b2plot = new BarPlot($data2y);
    $b2plot->SetFillColor("blue");
    $b2plot->value->Show();
    
    // Create the grouped bar plot
    $gbplot = new AccBarPlot(array($b1plot,$b2plot));
    
    // ...and add it to the graPH
    $graph->Add($gbplot);
    //设置标题字体样式
    $graph->title->Set(iconv("UTF-8","GB2312//IGNORE","网志博客信息统计表"));
    $graph->xaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","X-标题"));
    $graph->yaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","Y-标题"));
    
    $graph->title->SetFont(FF_SIMSUN,FS_BOLD);
    $graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
    $graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
    
    $graph->Stroke();
    

      

    当然了,我这里只介绍了一种方法,还有一种就是修改源码,但不推荐。因为我觉得改动源码可能会给其它地方带来意想不到的麻烦。

    使用JpGraph,要知道其版本、运行服务器以及操作系统的息息,不能张冠李戴,否则麻烦多多。

    好了,至此JpGraph使用介绍也就这么多了。

  • 相关阅读:
    Go 语言简介(下)— 特性
    Array.length vs Array.prototype.length
    【转】javascript Object使用Array的方法
    【转】大话程序猿眼里的高并发架构
    【转】The magic behind array length property
    【转】Build Your own Simplified AngularJS in 200 Lines of JavaScript
    【转】在 2016 年做 PHP 开发是一种什么样的体验?(一)
    【转】大话程序猿眼里的高并发
    php通过token验证表单重复提交
    windows 杀进程软件
  • 原文地址:https://www.cnblogs.com/tdalcn/p/6385413.html
Copyright © 2011-2022 走看看