http://www.cnblogs.com/rt0d/archive/2011/04/17/2018646.html
http://www.oschina.net/code/snippet_54371_8015
http://www.blueidea.com/tech/web/2011/8335.asp