在学校的贴吧里看到这样一个帖子:谁的电脑能打出这两个字,你的电脑起码两万以上!!不信试试…

说实话这种帖子标题是非常可笑的,属于猫扑脑残帖的一种。楼主想说的其实是,百度屏蔽了“涅槃”这两个字,所以能发表这两个字回复的必然都是高级主。8楼随后贴出了一段JavaScript 代码迎合了这种需要。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
(function (){
  var str=rich_postor._editor.getHtml();
  var out="";
  for(var i=0;i<str.length;i++){
    if(str.charCodeAt(i)<128){
      out+=str.charAt(i);
    }else{
      out+="&#"+str.charCodeAt(i)+";";
    }
  }
  rich_postor._editor.getHtml=function (){
    return out;
  };
  rich_postor._submit();
})();

这里貌似构造了一个闭包?鉴于我还完全没有参透闭包的奥妙,也完全不会使用闭包,我们先把它放一放。其实这段代码只做了一件事就是把字符转义为HTML 符号实体。

取自W3SCHOOL 的资料(虽然W3SCHOOL 有很多错误,但是这个没有错误):一些字符在 HTML 中拥有特殊的含义,比如小于号 (<) 用于定义 HTML 标签的开始。如果我们希望浏览器正确地显示这些字符,我们必须在 HTML 源码中插入字符实体。字符实体有三部分:一个和号 (&),一个实体名称,或者 # 和一个实体编号,以及一个分号 (;)。比如,要在 HTML 文档中显示小于号,我们需要这样写:&lt;或者 &#60;

HTML 字符实体本来是用来向HTML 文档中插入一些特殊字符用的,比如尖括号(&lt;&gt;),但是在这个例子中它把所有字符都转义成了符号实体,比如“涅槃”这两个汉字被转义成了&#28037;&#27075;

这样的话百度就不屏蔽了。

但是在HTML 文档到达浏览器的时候,浏览器会认出来这是一串符号实体,所以该是汉字的会还原成汉字。如果你查看一下源文件就会发现这两个字确实是符号实体了。

发现还真有很多人乐于发表这种帖子啊:【转】惊现百度超级漏洞,5亿万人只有60多个人能打出此字,…。。。果然非技术宅们容易被伪科学玩弄呢。

这个方法可以用来做一些好玩的事,比如发繁体的帖子之类的。