Latest Publications

理清URL编码

URL中,什么字符需要编码?

关于URL编码,RFC1738做了如下的规定:

“Only alphanumerics [0-9a-zA-Z], the special characters “$-_.+!*’(),” [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.”

RFC继而说明了保留字、特殊符号、不安全字符的含义——也就是说,下面三类字符可以不经过编码,直接出现在URL上:

  • [0-9a-zA-Z]
  • 特殊字符:$-_.+!*’(),
  • 保留字符:&/:;=?@

为了让我们思路更清晰,我们再总结一下,哪些字符必须要编码:

  • ASCII表中没有对应可显示字符的,例如汉字
  • 不安全字符,包括:#”%<>[]{}|\^`~
  • 不当做保留字符来使用的保留字符,即&/:;=?@

(阅读全文…)

Web文档编码的指定

Web开发中,文档常常指:(X)HTML文档、XML文档、CSS文档、js文档。指定文档编码的方式有以下几种:

HTTP Header中指定文档编码

在一个典型的HTTP响应头里,Content-Type的值中可以指定文档编码,如:

HTTP/1.1 200 OK
Date        Tue, 11 May 2010 04:09:22 GMT
Server      Apache
Content-Type    text/html; charset=gb2312

对于动态网页,用这种方式指定文档编码,在脚本中直接输出响应头即可:

header( 'Content-type: text/html; charset=gb2312' );

对于静态网页、CSS文件等,则需要在Apache等服务器中配置,例如:

AddType 'text/html; charset=gb2312' html

Content-Type meta元素中指定HTML文档编码

(阅读全文…)

HTML5 历史、现状及未来

分享一下HTML5的东西。

Even Faster Web Sites: 读书笔记(二)

这次因为一个项目的原因,又重读了《Even Faster Web Sites》书里的第四章:Loading scripts without blocking,并且在Cuzillion里做了大量测试,又发现了很多有意思的细节。发现自己读书太糙,自责一下。结合实际工作,加上自己的理解,再把这一章的实用内容总结一下。

要解决的问题

页面的script标签引入外部js文件时,会阻塞后续外部资源的下载和加载,包括图片、CSS文件、iframe等等。

1. Script DOM Element比较常用

“Script DOM Element”方法是常见的方法,也就是createElement(“script”)的方法下载js文件,以此并行加载后续资源。这其实是很棒的一个方法,因为不需要担心跨域,而且我们在中文应用中,不用担心编码的问题(可以为<script>指定编码)。但这里需要注意的是,非IE浏览器下,这种方法会阻止window.onload事件,因此如果你的js文件很大,可能会带来用户体验不好。IE浏览器对这种贴script标签的行为是“无动于衷”的,不会在状态栏、光标和进度圈上做任何指示。看来IE也不是一无是处嘛,哈哈!测试地址

2. 个人不提倡使用XHR Eval

XHR Eval方法我不提倡使用,首先是中文编码上会遇到麻烦,其次跨域问题。另外就是下面这句: (阅读全文…)

只做题,先不说话

已知:

var str = "string";
var Fn = function() {var i;};
var f = new Fn();

下面的语句执行结果,你能说对几个?

   1. str.__proto__
   2. str.prototype
   3. str.constructor
   4. str.__proto__.constructor
   5. Fn.__proto__
   6. Fn.prototype
   7. Fn.constructor
   8. Fn.__proto__.constructor
   9. Fn.__proto__.__proto__
  10. f.__proto__
  11. f.prototype
  12. f.constructor
  13. f.__proto__.constructor
  14. f.__proto__.__proto__

测试页面:test_proto.html