关于湖南省ACM竞赛的一些事

湖南省大学生编程大赛终于算是落幕了,担惊受怕的日子也算是告一段落了。

今天挺遗憾的,要不是粗心,今天比赛组织应该是零失误的。结果刚开始就问题来了,吓死我了,老师们一直

在安慰我说,不要着急慢慢找,其实我自己也挺淡定的。半个小时内就把问题解决了。后面4个小时就好过了。

   就一个insert语句里面的一个字符串的分号没打导致阿帕奇蹦了,我也够奇葩的.

我先说说我的工作,这届比赛是我参加的第一届ACM比赛,但我不是赛员,我加入了教师组,做数据维护。

我是学PHP的,故所以的WEB端设计和功能都是我做的,说话的气球管理系统,结果做蹦了,惭愧惭愧。

还是说说在这场比赛里面遇到的问题,一首歌的歌词可以形容的此时此刻的心情:“多么痛的领悟。”

刚开始接收这件事的时候,我就没想到要把WEB端做成一个系统,随便做做就好了,结果成了后面问题的根源。

问题:

PC^2生成的HTML对中文编码是unicode编码,这就深深地把我坑了,unicode编码,游览器认识,百度,谷

歌都认识,就我不认识,所以热身赛的时候,100多台电脑同时并发,数据一下暴涨到20几万条。当时我就下傻了。马上关闭收集功能,页面才

稳定下来。

晚上第一件事就是关闭收集功能,把数据分页,把页面分离。JS特效继续保持,用ajax进行页面加载。

[php]

//&#22899/; &#23090/;  &#30707/; 这三个是用unicode编码的,要通过定义函数来进行转换

// 转换函数
function unescape($str) {
$str = rawurldecode($str);

preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r);

$ar = $r[0];

foreach($ar as $k=>$v) {

if(substr($v,0,2) == "%u"){

$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
}

elseif(substr($v,0,3) == "&#x"){

$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));

}
elseif(substr($v,0,2) == "&#") {

$ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);

}
[/php]

上面那转换函数,我没看懂,先用着。这解决的中文问题。接下来就是打印问题,为了防止作弊,所以队员必须发送打印页面给服务器再通过服务

器打印。这里问题不大,只有注意.

[php]

//凡是有header() 函数,有cookie,session设置的页面都不要用记事本打开,因为记事本的编码模式是ANSI编码

//所以就会报错,还有对出上面的那些函数,一定要记得去掉bom.因为session_start()函数也好,header()函数

//也好在他们之前是不能输出东西的。

[/php]

说好的,做完比赛了还是比设计的代码共享出来,一起交流学习:下载地址
还有一些BUG没修复。有兴趣的同学,可以自己改改。

2 thoughts on “关于湖南省ACM竞赛的一些事

发表评论

电子邮件地址不会被公开。 必填项已用*标注