字符编码问题
为什么要用编码函数encodeURIComponent?
前端:请求的url参数处理,1)参数有可能包含& # 这些url中有特殊含义的字符,会破坏参数的完整性
2) 参数中可能有中文或者其他文字,有必要前后台协议统一utf8字符
后端: 后端数据直显在页面,有可能包含<script>等与html格式冲突的字符,需要编码
除了encodeURIComponent外,还有encodeURI和escape。escape已废弃,encodeURI应用于对整个url编码用的也不多。
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
什么是htmlEncode?
function html(escape) { /* var replace = ["'", "'", '"', """, " ", " ", ">", ">", "<", "<", "&", "&", ]; escape === false && replace.reverse(); for (var i = 0, str = this; i < replace.length; i += 2) { str = str.replace(new RegExp(replace[i], 'g'), replace[i + 1]); } return str;*/ function encode() { htmlDiv.innerHTML = ""; return htmlDiv.appendChild(document.createTextNode(this)).parentNode.innerHTML.replace(/\s/g, " "); } function decode() { htmlDiv.innerHTML = this; return htmlDiv.innerText; } var str = this; return escape === false ? decode.apply(str) : encode.apply(str); }
用于将html的特殊字符转义,使用情景?
1)用户输入文字信息会回显到页面,为了防止xss输入类似<script>等各种标签,encode输入内容。
2)将html结构保存到后台进行encode,省去了每次取值时encode也防止了存储时可能的冲突(如xml的<>、js的srcipt)。
字符编码
ASCII:英文编码
GBXXXX:中文编码 gb2312<gbk<gb18030
Unicode:统一各国文字的编码,utf8 变长的编码方式
Big5:繁体编码
ISO8859-1:西欧语音编码 latin-1