|
|
第 1 帖 | |
|
|
标题: [原创]ANSI(GB2312)编码全中文支持的WEBALIZER版本,GD库 GB2312折衷支持。 webalizer 日志分析程序,原版在编译时加上 -with-language=simplified_chinese, 可以实现中文文字部分的支持,但是图形部分由于GD库的缺陷,却是没有中文的,主要原因有2个:
1。系统默认的字库一般不包含中文字库; 2。GD不能正确识别gb2312的中文字符,需要把文字变成utf-8 网上原有一文《让Webalizer完美支持中文》提供了一个解决方案,就是把语言文件换成UTF8格式,再编译从而产生UFT8格式的网页,但是此方案有重大缺陷,就是webalizer 在做日志分析时,从日志文件中抓取的各种信息并不是UTF8的,操作系统对于系统日志文件的保存基本上全是ANSI编码格式。所以这样生成的日志网页编码是乱的:一部分是UTF8(标题部分),一部分是ANSI(GB2312)(中文数据部分)。 因为无法将系统日志文件修改成UTF8编码(这个改动量大了),所以最好的方式是,仍然在程序中采用ANSI(GB2312)编码,只有当WEBALIZER中调用GD图形库前临时做字符编码转换,把传入的GB2312编码的字符串转换成UTF8,再由GB库去生成中文图形文件。 找一个比较顺眼的中文字体,传到服务器上,比如/opt/lampp/webalizer/simkai.ttf,前提是服务器已经安装了gd包,并且顺利支持freetype,这个在安装gd的时候可以看到是不是支持. 因为控制图形输出的源文件中使用gdImageString()和gdImageStringUp()输出文字,这2个函数不支持自定义显示字体,所以这里要给他增加这个功能.我们做的就是重载这2个函数,用另一个支持自定义字体的函数gdImageStringFT()来代替他们的功能.打开源文件目录下的graphic.c文件: 在头部加入以下代码: #include <iconv.h> #define OUTLEN 255 在最后增加以下代码: int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen) //此函数用来转换字符编码 { iconv_t cd; int rc; char **pin = &inbuf; char **pout = &outbuf; cd = iconv_open(to_charset,from_charset); if (cd==0) return -1; memset(outbuf,0,outlen); if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1; iconv_close(cd); return 0; } void gdImageString(gdImagePtr im, gdFontPtr font, int x, int y, unsigned char *s, int color) { char out[OUTLEN]; code_convert("gb2312","utf-8",s,strlen(s),out,OUTLEN); printf("unicode-->gb2312 in=%s|out=%s|\n",s,out); gdImageStringFT(im, 0 , color, "/opt/lampp/webalizer/simkai.ttf", 9 , 0.0, x, y+9, out); //9是使用的字体大小,也可以自己修改 } void gdImageStringUp(gdImagePtr im, gdFontPtr font, int x, int y, unsigned char *s, int color) { char out[OUTLEN]; code_convert("gb2312","utf-8",s,strlen(s),out,OUTLEN); printf("unicode-->gb2312 in=%s|out=%s|\n",s,out); gdImageStringFT(im, 0 , color, "/opt/lampp/webalizer/simkai.ttf", 9 , -PI/2, x, y-9 , out); } 好了,开始配置. ./configure -with-language=simplified_chinese make & make install 这样我们就得到了ANSI(GB2312)编码全中文支持的WEBALIZER版本 此帖于 07-08-07 16:34 被 dreamrise 编辑. |
|
|
|
|
|
|
|
第 2 帖 | |
|
|
真是好东西,谢谢
不知现在用webalizer的多吗????? |
|
|
|
|
|