encodeURIComponent


   脑袋决定嘴巴,言语的核心指向腹中的酝酿,表述当然存在复杂性,但是只要主谓宾合理就坐再配上不是太糟糕的理解能力,语义便能达到不丢包的传达。
   
   下面来自W3School的描述:
     
“encodeURIComponent() 把字符串作为 URI 组件进行编码。”(完全无缝不留痕复制粘贴)
   
   鄙人鄙陋的分析:函数名明确指出是对Uri进行编码,但是它画风一砖甩到了“字符串”上(好,我承认URI也是String,但是老子可以有很多儿子,儿子不会有很多老子,出来混说URI就URI),甩到String头上我就不说了,后面又来句像uri那样编码,这一砖拍的我一脸的茫然,让我想起了一个段子:

        师:“高分微积方程有哪方面的运用”
        甲:“老师,它有物理学方面的运用”
        师:“这位同学答的不错”
        乙:“你不是学文的吗!你怎么知道”
        甲:“这是常识”
        乙:....(一脸懵懂)


   鄙人鄙陋的再解释(如此贬低自己是谦虚的极端,这样不好,年轻气盛才是年轻人):

   encodeURIComponent()对URI进行编码,不是所有char都被编码,只是有些char会被编码成十六进制的转义序列


   不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

   其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

  
   important here :对String进行编码,该方法指定的char会被编码
  
   大家又会问为什么这样做,稍安勿躁,待我复制粘贴:



sName=encodeURIComponent(sName);
var url="reg_te2.shtml?type="+mUserType+"&id="+vID+"&name="+sName;

保证数据传输的准确性以及防止Url注入带来的跨站点攻击
如果你不这样做 如果mUserType的值被恶意修改成:3&id=12&name=123#
你的程序就会被注入了 很可能带来安全性问题
如果你调用这个方法 上述mUserType会被进行编码成另外一种Unicode编码的格式 从而可以避免这种攻击



   

猜你喜欢

转载自eighto.iteye.com/blog/2316813