[LAMP] DotProject 1.0.2-1 Linux中甘特图中文显示成乱码的问题解决方案
呵呵,好久没有写技术文章了。今天开始恢复吧。
从星期开始这一个月我的任务是修改 dotProject 以适应公司的应用,哈哈,可以正大光明的玩偶最喜欢的 PHP 了,开心啊。
第一个任务就是修改里面项目甘特图中中文乱码的问题。
原始的效果如下:
其中的乱码应该是“测试任务”
明显的 PHP 的 GD 库对中文支持的 bug,呵呵。上网搜索解决方法,在一个台湾网站上找到解决方法,根据和中文版的对应,修改方法如下:
-
找到 Linux 下存放字体的路径,我的系统是
/usr/X11R6/lib/X11/fonts/,然后找到c:\window\fonts\,拷贝 sinsum.ttc 到这个目录下并且改名为 simsun.ttf。 -
修改
dotProject/lib/jpgraph/src/jpgraph.phpL 27,把原来的
DEFINE("TTF_DIR","/usr/X11R6/lib/X11/fonts/truetype/");修改为DEFINE("TTF_DIR","/usr/X11R6/lib/X11/fonts/");L176,在
DEFINE("FF_TREBUCHE",17);后面增加一行DEFINE("FF_SIMSUN", 18);L1786,
1
2
3
4
5
6
7
8
9
10
11
12
13function TTF() {
$this->style_names=array(FS_NORMAL=>'normal', FS_BOLD=>'bold', FS_ITALIC=>'italic', FS_BOLDITALIC=>'bolditalic');
// File names for available fonts
$this->font_files=array(
FF_COURIER => array(FS_NORMAL=>'cour', FS_BOLD=>'courbd', FS_ITALIC=>'couri', FS_BOLDITALIC=>'courbi' ),
FF_GEORGIA => array(FS_NORMAL=>'georgia', FS_BOLD=>'georgiab', FS_ITALIC=>'georgiai', FS_BOLDITALIC=>'' ),
FF_TREBUCHE => array(FS_NORMAL=>'trebuc', FS_BOLD=>'trebucbd', FS_ITALIC=>'trebucit', FS_BOLDITALIC=>'trebucbi' ),
FF_VERDANA => array(FS_NORMAL=>'verdana', FS_BOLD=>'verdanab', FS_ITALIC=>'verdanai', FS_BOLDITALIC=>'' ),
FF_TIMES => array(FS_NORMAL=>'times', FS_BOLD=>'timesbd', FS_ITALIC=>'timesi', FS_BOLDITALIC=>'timesbi' ),
FF_COMIC => array(FS_NORMAL=>'comic', FS_BOLD=>'comicbd', FS_ITALIC=>'', FS_BOLDITALIC=>'' ),
FF_ARIAL => array(FS_NORMAL=>'arial', FS_BOLD=>'arialbd', FS_ITALIC=>'ariali', FS_BOLDITALIC=>'arialbi' )
);
}修改为
1
2
3
4
5
6
7
8
9
10
11
12
13
14function TTF() {
$this->style_names=array(FS_NORMAL=>'normal', FS_BOLD=>'bold', FS_ITALIC=>'italic', FS_BOLDITALIC=>'bolditalic');
// File names for available fonts
$this->font_files=array(
FF_COURIER => array(FS_NORMAL=>'cour', FS_BOLD=>'courbd', FS_ITALIC=>'couri', FS_BOLDITALIC=>'courbi' ),
FF_GEORGIA => array(FS_NORMAL=>'georgia', FS_BOLD=>'georgiab', FS_ITALIC=>'georgiai', FS_BOLDITALIC=>'' ),
FF_TREBUCHE =>array(FS_NORMAL=>'trebuc', FS_BOLD=>'trebucbd', FS_ITALIC=>'trebucit', FS_BOLDITALIC=>'trebucbi' ),
FF_VERDANA => array(FS_NORMAL=>'verdana', FS_BOLD=>'verdanab', FS_ITALIC=>'verdanai', FS_BOLDITALIC=>'' ),
FF_TIMES => array(FS_NORMAL=>'times', FS_BOLD=>'timesbd', FS_ITALIC=>'timesi', FS_BOLDITALIC=>'timesbi' ),
FF_COMIC => array(FS_NORMAL=>'comic', FS_BOLD=>'comicbd', FS_ITALIC=>'', FS_BOLDITALIC=>'' ),
FF_ARIAL => array(FS_NORMAL=>'arial', FS_BOLD=>'arialbd', FS_ITALIC=>'ariali', FS_BOLDITALIC=>'arialbi' ),
FF_SIMSUN => array(FS_NORMAL=>'simsun', FS_BOLD=>'simsun', FS_ITALIC=>'simsun', FS_BOLDITALIC=>'simsun' )
);
} -
修改
dotProject/lib/jpgraph/src/jpgraph_gantt.php。L413,把
var $iFFamily=FF_FONT1,$iFStyle=FS_NORMAL,$iFSize=10;修改为var $iFFamily=FF_SIMSUN,$iFStyle=FS_NORMAL,$iFSize=10;L429,把
$this->iText = $aTxt;修改为$this->iText = iconv("GB2312","UTF-8",$aTxt); -
修改
dotProject/modules/tasks/gantt.php。L201,把
$name = strlen( utf8_decode($a["task_name"]) ) > 25 ? substr( utf8_decode($a["task_name"]), 0, 22 ).'...' : utf8_decode($a["task_name"]) ;修改为$name = strlen( $a["task_name"] ) > 25 ? substr( $a["task_name"], 0, 22 ).'...' : $a["task_name"] ;
完成,刷新页面,结果如下:
一切OK。
开始看了那些大陆的帖子,都是讲在 Windows 下怎么处理的,只要把 FF_FONT 相关改成 FF_SIMSUN 就行了,那些台湾的帖子,只说到第 3 步就说 OK 了,后来想想,估计他们用的都是 big5 编码的关系。我们都是 GB2312。
然后再一个俄文站点上找到第4步的修改方法,成功~
哈哈
