HTML编码字符集
为了让浏览器知道页面应该显示什么,必须要给页面一个明确的字符集用于浏览器编码解码。通常,我们都用utf-8字符集。如<meta charset="UTF-8">
来指定页面所用的字符集。这样一来,浏览器可以根据utf-8字符集来显示内容。
点击这里先展示一下HTML特殊字符与字符实体对照表。
浏览器对HTML标签内的特殊字符解析时,为什么直接写特殊字符也行,写特殊字符对应的字符实体也行?
innerHTML的用法或jQuery的html()
设置:innerHTML或html(arg:string)
在为DOM节点的innerHTML赋值或jQuery对象调用html(arg: string)时,浏览器会对赋值的字符串(html()方法的字符串参数)进行解析,生成DOM树,因此页面标签结构会变化(虽然从页面外观上可能看不出来)。
获取:innerHTML或html()
在用DOM节点的innerHTML获取值或调用html()不传入参数时,浏览器会对该DOM节点下的DOM树进行序列化后返回,序列化的过程中按如下两个规则:
- DOM树中的标签节点不进行编码,按原样返回,甚至浏览器会判断传入的不完整标签,自动补齐后按原样返回;
- 其他特殊字符进行编码(即特殊字符会转换为字符实体),将编码后的字符串返回。
innerText的用法
设置:innerText或text(arg:string)
在为DOM节点的innerText赋值或jQuery对象调用text(arg: string)时,浏览器不会对该赋值的字符串(或text()方法的参数字符串)进行解析,只是把该字符串作为文本节点的值。
获取:innerText或text()
在用DOM节点的innerText获取值或调用text()不传入参数时,浏览器获取该DOM节点下的文本节点值,直接返回,不进行任何序列化(即不会对特殊字符编码)
一个用于escape字符串防止XSF攻击的方法
function decodeHtml(str) {
// 创建一个文档片段;
var div = document.createElement('div');
// 将div元素的HTML内容设定为str,该str会被浏览器解析为文档片段树;
div.innerHTML = str || '';
// 返回div元素下的所有文本节点值,这样避免了str里面包含的标签,因为包含的标签已经被上一步解析过了,innerText不会返回解析过的元素节点。
return div.innerText;
}
URL编码
默认采用UTF-8来编码路径部分和查询字符串部分。IE浏览器可能查询字符串部分采用了其他方式来编码;