Make StatCounter More Readable

我比较爱看这个blog访问的StatCounter统计数据。昨天还比较了一下Google Analytics,GoStats和StatCounter这几家的统计服务,个人还是觉得StatCounter最好用。Google Analytics界面好难用,GoStats免费用户限制太多。还听说过的比较有名的一个好像叫做MINT。其实这几个都算是比较好的了。昨天还看到了某人主页上用的不知哪家的统计服务,还会弹广告窗口的,lol 不过每次看的时候还是有点问题。我最经常看的是Pageloads的统计,这里可以看到哪个页面被访问了,还有这个访问的refer地址,也就是这次访问的上一个页面。常见的refer地址是搜索引擎,或者一些带有俺的blog地址的页面,比如WordPress网站上我写的那个小plugin的页面。一条记录显示出来大概是这样 这条记录上第一行是访问者的ip和域名,第二行是访问的页面的标题,第三行是这次访问的refer地址。比较不爽的一点就是标题和refer地址里面有很多编码之后的中文,我常常还要点一下去看看人家是用什么关键字来查的。研究了一下之后发现标题里面那种%u9AD8这样的编码,后面这四位就是Unicode Number;google搜索的url里面带有的%D0%A1这种是用utf-8编码的,这两个都比较容易用JavaScript来转换。Baidu这个家伙的URL里面看起来和google挺像,也是%CB%C9这样的,但其实用的是GB2312编码,要转换到utf-8需要查很大的表,不是单纯用JavaScript就可以做的了。Whatever,能把标题和google搜索的utf8编码转换过来也就方便不少了。 基本的想法就是在页面读取完之后执行一段JS,这个就需要用到Firefox的插件GreaseMonkey。我按照GreaseMonkey的规范写了一小段User JavaScript,还挺好用,嘿嘿。每次看StatCounter的pageload页面的时候这段小程序就会自动工作,转换以后的效果是这样 代码在这里下载——StatReadable.user.js 有用的部分是这几句 allLinks = document.evaluate( “//td[@class=’tableContent1Left’]/a[@target=’_blank’]| //td[@class=’tableContent2Left’]/a[@target=’_blank’]”, document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); for (var i = 0; i < allLinks.snapshotLength; i++) { thisLink = allLinks.snapshotItem(i); // do something with thisLink oldHTML = thisLink.innerHTML; //for %uXXXX newHTML = oldHTML.replace( /%u([0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z])/g,”�$1;”); Try.these( function (){ //for utf8 encoding newHTML = newHTML.replace(/((%[A-Z0-9][A-Z0-9])+)/g, function(str,p1,offset,flags){ return decodeURIComponent(p1); […]

赞Firefox,赞FireBug

今天在折腾一个Ajax的东西,结构大概是:MySQL数据库->用Axis搭的WebService->前端Ajax应用。应用服务器是tomcat。 由于数据库里面已经用了gbk的编码,而且WebService的服务端代码也写好了,不愿意再改成utf8的,所以整个系统就走了gbk编码的路线。 提交表单的乱码比较好办,getBytes就行了。 Ajax提交参数的时候很是遇到了一些麻烦,用JS的escape之类的方法总是莫名其妙的出错,不知道是不是我自己手误了。最后用Java的URLEncoder先encode了中文参数,接收端new String(getBytes("ISO-8859-1"),"gbk"); 在Ajax接受服务端传来的gbk编码的数据的时候遇到了乱码。查了一下,应该是httprequest对象在将 responseBody decode成responseText的时候默认是按照utf-8的方法来进行decode的,简单的方法是在服务端设置response的header,网上搜到的解决方法一般是说response.setHeader("Charset","GB2312"),但是我用了之后没有效果,感到异常迷茫。。 这时候,伟大的Firefox和FireBug帮助了我。。。。FireBug0.4.1版本具有显示XMLHttpRequest的信息的功能,我用它看了一下,response的header和body都显示出来了,而header里面赫然有一行“Content-Type=text/html;charset=iso-8859-1",干。。。于是我把那句setHeader改成了response.setHeader("Content-Type","text/html;charset=gbk"); 问题解决。。。 这里再次向Firefox和FireBug致敬,真是web开发者的福音!

几个经验。。

 Intellij4.5下面配置tomcat,发现没法改动server.xml。Intellij总是在自己的临时目录底下开一个目录,建一套conf,我设置了tomcat base也不起作用。一怒之下看到它还是从catalina的一个startup.bat之类的bat文件开始启动tomcat的,就直接去改了那个bat,把calatina_base环境变量强制置成tomcat的安装目录(不读启动参数了),于是搞定。。 JSP开发中遇到了中文问题。。解决方法如下,所有页面设置成GB2312,每个页面读request参数之前request.setCharacterEncoding("GB2312"),注意一定要在开始读参数之前设置。。刚遇上这个问题的时候就是在读取参数之后才设置编码,结果不行,提交中文信息的表单一律用POST方法(这个倒是我试出来的,估计要用GET方法的话要对url做一下encoding)。ok