-
到底是谁的错?
2009-03-19
在 AJAX Mistakes 中提到了关于 Google Web Accelerator 的问题,此问题的原出处为 Google Web Accelerator: Hey, not so fast - an alert for web app designers,没想到这个问题现在讨论得热火朝天了,在 Chris Shiflett 的 BLOG 中也开始了这方面的讨论,观点有很多种。
一种是认为造成这种结果是开发者的责任,不要去抱怨 Google,因为在 HTTP 规格说明书 RFC 2612 的 9.1.1 章节 中已经谈到了这一点:In particular, the convention has been established that the GET and HEAD methods SHOULD NOT have the significance of taking an action other than retrieval. These methods ought to be considered "safe". This allows user agents to represent other methods, such as POST, PUT and DELETE, in a special way, so that the user is made aware of the fact that a possibly unsafe action is being requested.
也就是说 GET 方法用于完全安全的请求,即是说不需要任何其他多余的动作,表现在链接方式上,就是不要在链接上加上 JavaScript 操作,比如在删除的链接中,点击之后会提示用户“是否确实想要删除?”,使用了这种 JavaScript 动作说明这个点击操作不是完全安全的,那么就不能使用链接方式,而是要使用表单的 POST 等方式。
另一种认为这是 Google 的责任,因为现实中已经存在了很多在链接中使用 JavaScript 的操作,而且 HTTP 规格说明书中并没有使用 MUST NOT,而是使用了 SHOULD NOT,所以 GET 是被允许这样使用的。
当然,除了上边两种之外,还有比较折中的,就是认为双方都有责任,一方是没有太好地去遵循标准,另一方是太过于苛刻地去遵循标准,并且忽略了目前存在的很多现实应用。
目前,对于这方面的问题解决,可以通过服务器端代码判断实现,当然也可以通过修改客户端的所有存在 JavaScript 操作的链接,但这样修改量可能会比较大。对于使用 Ruby on Rails 的,可以在这里看到解决的代码示例,此代码通过判断,如果是 GWA 发来的请求,则返回 403 错误。对于使用 PHP 的,可以参考 Ruby 代码进行相应的改动:
<?php
if ($_SERVER['HTTP_X_MOZ'] == 'prefetch') {
header('HTTP/1.0 403 Forbidden');
exit;
}
?>
对于这个问题,我比较支持第三种观点,确实双方都有责任,很多标准其实也是在大家相互之间的妥协中形成的。 -
一段废弃的代码
2007-07-05
/*------------------------------------- 已废弃---------------------------------------
$year = date("Y");
$month = date("n");
$day = date("j");
$is_runnian = date("L");// 如果当前时间为新一年的第一月的第一天
if ($month == 1 && $day == 1 ) {
$start_year = $year-1;
$start_month = 12;
$start_day = 31;
// 如果当前时间不是一月的第一天,但是是除了一月外的其它月份的第一天
} elseif($month != 1 && $day == 1 ) {
$start_year = $year;
$start_month = $month-1;
// 如果是4'6'9'11月,则前一天为30号
if ( $start_month == 4 || $start_month == 6 || $start_month == 9 || $start_month == 11 ) {
$start_day = 30;
// 如果是二月,看是否是闰年,如果是前一天为29号,否则为28号
} elseif ( $start_month == 2 ) {
if ( $is_runnian == 1 ) {
$start_day = 29;
} else {
$start_day = 28;
}
// 否则前一天是31号,证明是1`3`5`7`8`10`12`的月份
} else {
$start_day = 31;
}} else { // 否则年月都不变,天数减一
$start_year = $year;
$start_month = $month;
$start_day = $day-1;
}// 把奇数的月份加上前导0
if ( strlen($start_month) == 1 ) {
$start_month = "0".$start_month;
}
// 把奇数的天份加上前导0
if ( strlen($start_day) == 1 ) {
$start_day = "0".$start_day;
}// 结束月加前导0
if ( strlen($month) == 1 ) {
$month = "0".$month;
}// 结束日加前导0
if ( strlen($day)== 1 ) {
$day == "0".$day;
}// 前一天查询开始的日期,例如:2007-06-05 01:00:01
$start = "{$start_year}-{$start_month}-{$start_day} 01:00:01";// 当前天查询结束的日期,例如:2007-06-06 01:00:00
$end = "{$year}-{$month}-{$day} 01:00:00";
echo $start;
echo $end;// 查询前一天一点到今天一点钟新注册的会员
$query = "select * from mail where ";
$query .= "trunc(SJ)>=to_date('$start','yyyy-mm-dd hh:mi am') and trunc(SJ)<=to_date('$end','yyyy-mm-dd hh:mi am') ";
--------------------------end------------------------------------------------*/ -
,
2007-05-07
不论在什么时候,重要的是在开始之后就不要停止!
--摘自PHPE
-
协议大全..WEB开发手册大全!!
2007-03-17
协议大全:http://www.cnpaf.net/class/protocolAll/
WEB手册:HTML/JavaScript 相关重要链接
World Wide Web Consortium (W3C)
http://www.w3.org/
中国万维网联盟
http://www.w3china.org/index.htm
W3CHINA.ORG开放翻译计划
http://zh.transwiki.org/wiki/index.php/%E9%A6%96%E9%A1%B5
HyperText Markup Language (HTML) Home Page
http://www.w3.org/MarkUp/
Firefox 1.5 for Developers
http://developer.mozilla.org/en/docs/Main_Page
HTML 4.01 Specification
http://www.w3.org/TR/html4/
HTML 语言教程
http://www.lib.tsinghua.edu.cn/c ... al/html_design.html
HTML彻底剖析
http://www.goeway.com/WEB/webpro ... anatomy_1-1.asp.htm
DOM文档模型: Document Object Model HTML
http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html
DOM数据调用: Document Object Model (DOM) Level 3 Load and Save Specification
http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/
DOM核心操作: Document Object Model (DOM) Level 3 Core Specification
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/
JavaScript Guide
http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/
JavaScript 中文教程
http://www.lib.tsinghua.edu.cn/chinese/INTERNET/JavaScript
JavaScript 参考教程
http://www.iselong.com/online/ebooks/javascript/
JavaScript语言参考手册
http://www.itlearner.com/code/js_ref/contents.htm -
Simple BBTag Parser
2007-03-05
I was just bored and wrote something that might be useful to some people. It's a simple bb tag parser to convert common bb tags to html, and vice versa.
Currently replaces..
B,I,U,QUOTE,IMG, & URL
and.. converts them back to normal text.
bbtags.class.php
php:
<?php
/*
* This class will parse the common bbtags B U I URL IMG & QUOTE
* into suitable HTML equivalents and can also reverse them.
*
* Works with PHP >= 4.05
*
* author: scottayy@gmail.com
* date: June 4th, 2006
* update: June 5th, 2006
* - converting and reversing called in one function (convertBB)
* - replacing all bb tags combined into one function (replaceTags)
* - reversing all html tags back to bb combined into one function (reverseTags)
* - defining our tags called in one function (defineTags)
*/
class parseBB {
var $basictags;
var $basicreplacements;
/*
* function called to turn bb tags into html tags
* and called with a FALSE boolean to do the opposite
*
* @param str $text
* @param boolean
*/
function convertBB($text,$normal=TRUE){
//define our tags
$this->defineTags();
//normal or reverse conversion?
if($normal === TRUE)
return $this->replaceTags($text);
else
return $this->reverseTags($text);
}
//used internally, does the actual conversion from bb to html
function replaceTags($text){
//replace basic bbcode [b][u][i][quote]
$text = str_replace($this->basictags,$this->basicreplacements,$text);
//replace [url=...]...[/url] bbcode
if(preg_match("^\[url=(.+?)\](.+?)\[/url\]^im",$text,$urls)){
$text = preg_replace_callback('^\[url=(.+?)\](.+?)\[/url\]^im',
create_function('$urls',
'return \'<a href="\'.trim($urls[1]).\'" target="_blank">\'.trim($urls[2]).\'</a>\';'
),
$text);
}
//replace [url]...[/url] bbcode
if(preg_match("^\[url\](.+?)\[/url\]^im",$text,$urls2)){
$text = preg_replace_callback('^\[url\](.+?)\[/url\]^im',
create_function('$urls2',
'return \'<a href="\'.trim($urls2[1]).\'" target="_blank">\'.trim($urls2[1]).\'</a>\';'
),
$text);
}
//replace [img] tags
$text = preg_replace_callback('^\[img\](.+?)\[/img\]^im',
create_function('$matches',
'return \'<img src="\'.trim(htmlentities($matches[1],ENT_QUOTES)).\'" alt="Image">\';'
),
$text);
return $text;
}
//used internally, reverses html back to bbcode
function reverseTags($text){
//reverse basic html to [b][u][i] & quote bbcode tags
$text = str_replace($this->basicreplacements,$this->basictags,$text);
//reverse url tags
if(preg_match_all("#<a href=\"(.+?)\" target=\"_blank\">(.+?)</a>#im",$text,$rurls)){
$i=0;
foreach($rurls[0] AS $url){
$text = str_replace($url,"[URL={$rurls[1][$i]}]{$rurls[2][$i]}[/URL]",$text);
$i++;
}
}
//reverse img tags
if(preg_match_all("#<img src=\"(.+?)\" alt=\"Image\">#im",$text,$imgs)){
$i=0;
foreach($imgs[0] AS $imglink){
$text = str_replace($imglink,"[IMG]{$imgs[1][$i]}[/IMG]",$text);
$i++;
}
}
return $text;
}
function defineTags(){
//define $basictags
$this->basictags = array(
'[b]',
'[B]',
'[i]',
'[I]',
'[u]',
'[U]',
'[/b]',
'[/B]',
'[/i]',
'[/I]',
'[/u]',
'[/U]',
'[quote]',
'[quote]',
'[/quote]',
'[/quote]'
);
//define $basicreplacements
$this->basicreplacements = array(
'<b>',
'<b>',
'<i>',
'<i>',
'<u>',
'<u>',
'</b>',
'</b>',
'</i>',
'</i>',
'</u>',
'</u>',
'<blockquote>',
'<blockquote>',
'</blockquote>',
'</blockquote>'
);
}
}
?>
Sample Usage:
php:
<?php
require 'bbtags.class.php';
$bb = new parseBB();
$raw = "[b]text[/b] [i]test[/i] [u]test[/u] [b][u][i]test[/i][/u][/b]
[img]http://forums.devnetwork.net/templates/subSilver/images/logo_phpBB.gif[/img]
[quote]yo, i'm a quote![/quote] http://www.showmypro.com Yahoo";
$bbalized = $bb->convertBB($raw);
$regular = $bb->convertBB($bbalized,FALSE);
echo $bbalized.'<br /><br />'.$regular;
?> -
我和耿先生的合影!
2006-11-04
此图片暂时无法显示. -
新博客..推出...
2006-10-18
全英文...虽蹩脚...却也要努力.
-
坏坏坏坏坏,我已经失恋了N个礼拜!!!
2006-07-14
在PHPCHINA,不断的有人称呼我"小帅",因为偶在哪里的名字叫"帅的不能再输啦".哈哈,老的牙都快掉光了竟还有人叫俺小............帅.
帅帅帅帅帅,我已经失恋了好多个礼拜!!!
张学友,走过一九九九..这张专辑是我这一生最最喜欢的一张.
坏坏坏坏坏,我已经失恋了N个礼拜!!!

-
<<新事旧事网事>>新传!!!
2006-07-03
有些对我来说非常重要的网友开始变的得主动不和我搭话..使我感觉十分的郁闷..唉,为什么?我再也说不清楚自己给别人留下了什么影像..记录有时是在痛苦的回放过去...找寻找那永远也找不到的答案...好吧,但愿你一安好,忘记那曾经记录在MSN中的跳跃的文字.我将永远记住你,就像记住我自己.
昨日在黄河路骨科医院附近碰到了在一家窗帘行上班的晁凤凤同学.晁同学机智灵利.活泼可爱.天生灵动.是一位好好好好好同学..十年弹指一挥间...晁同学竟没有长的茁壮起来..仍旧单薄的像春喜姐姐的扎头绳..我说妹子,你咋不也长的像咱们豪同学那样精悍.虽然短小却也流露出迷人的风采.这豪同学是谁,咳咳.不多说,大家想一会就明白了.莫名奇妙,怎么说晁同学又扯到豪同学身上来了..嗯,回归一下正题.继续发挥对晁同学的创造性唱作..嘎嘎....晁同学从路边硬绑绑的水泥地里蹦出来..当我们相互第三次回眸的时候,上天保佑让我们记起九年前那久远的回忆.晁同学很爽快的叫出了豪同学的名字.豪同学很惊呀...这年头能一下子记起豪同学名字的异性师妹们已经不多,这真是喜事儿.晁同学痛快的追忆这些年自己的沧桑巨变...豪同学听的虽未热血沸腾..但仍意犹未尽...晁同学痛快的记下了豪同学的电话号码...并哑哑的笑了一句:"豪同学发福了啊,瞧你这肚子长的....".豪同学立码谦笑道:"呵呵,这些年也就肚子上多长了二斤,其它的东西估计抖不出多少来."..小雨竟然开始撒野.晁同学丛丛的和豪同学分别..豪同学机智过人,在和晁同学临分别前成功的索要了那时班上的第一美媚"斗鸡先生"的电话.这斗鸡先生何许人也,这斗鸡先生可是个了不得的人物..踩猫巨假(才貌俱佳).只用双拳(智勇双全).天下吾敌(天下无敌).生性麻拉.耐天生一美媚也...豪同学很具体的拔打了斗同学的电话..豪同学:"你好,辛总吗?".斗同学:"哦.嗯.啊.呀.依...........是..........,你是哪位".豪同学:"我是,嗯.啊.依.哦.偶............".斗同学:"嗯.咦,你到底是那丫啊.快快报上名来".豪同学和午斗同学打了一阵哑迷之后老老实实安安分分规规矩矩的把自己介绍给了斗同学.斗同学哑然失笑."啊,是你小子...",斗同学很不具体的给豪同学介绍了自己的事业.豪同学也故作伟大的引用了某著名当代音乐人的两句歌词:"我是个寂寞的光棍,痛苦的光棍.到了现在没有媳妇......到如今没钱没房没车.那我饿米托佛.想要对人声白砣."..豪同学诵的是异常热烈...后来斗同学严肃的说:"豪同学,你的普同话咋就那么差呢..."...豪同学一顿痛哭.."这可是俺的心声...有力的表达了新世纪的一个有伟青年在胜利到达了事业的低谷之后..在爱情的道路也一路向下后表达的的种种无耐和对现实中现代青年爱情观的不满.."..豪同学回到家后马上把自己的QQ签名改成了"人到中年,回归恬静,"把MSN的签名改成了"成功她妈妈就是失败.",后来豪同学从这些话中找到了新的启发点...觉得斗同学在无形中点拔了自己.....斗同学这这...这之...无形推拿嘴是从哪儿学来的..难不成是湖南辣椒汤给灌的...饿米吐佛....斗同学还是英勇不减当年啊.............这
就是我有趣的晁同学和斗同学.
仅以此记为标题...记忆九年前及九年后的点点滴滴的同学记忆...感谢可爱的晁同学和斗同学....你们为豪同学带来了快乐...并把已上文字赠于晁同学和斗同学...以供嬉笑怒骂之备用....
-
显示色谱图的HTML代码和JavaScript脚本如下:
2006-06-23
<HTML>
<HEAD>
<TITLE>色谱图</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<h2>512色色谱图</h2>
<SCRIPT LANGUAGE="JavaScript">
//定义数组对象
clr=new Array('00','20','40','60','80','a0','c0','ff');
//创建8个8行8列的表格
for (i=0;i<8;i++) {
//创建表格,单元格内填充距8像素
document.write("<table border=1 cellpadding=8>");
for (j=0;j<8;j++) {
document.write("<tr>");
for (k=0;k<8;k++) {
//设置表格单元的背景颜色
document.write('<td bgcolor="#'+clr[i]+clr[j]+clr[k]+'">');
//设置文字颜色
document.write('<tt><font color="#'+clr[7-i]+clr[7-j]+clr[7-k]+'"> ');
//显示16进制颜色值
document.write('#'+clr[i]+clr[j]+clr[k]+' </font></tt></td>'); }
document.write("</tr>"); }
document.write("</table><br>"); }
</SCRIPT>
</CENTER>
</BODY>
</HTML>







