在 vue.js 2.x 的编译过程中,我们发现源码使用了 decodeAttr 函数对标签属性值进行解码,这引发了一个疑问:既然这些特殊字符作为属性值本身并不会被解析为 html 标签,为何还要解码呢?
让我们来看一段代码片段:
function decodeAttr (value, shouldDecodeNewlines) { // 略 return value .replace(ltRE, '<') .replace(gtRE, '>') .replace(ampRE, '&') .replace(quoteRE, '"') } function handleStartTag (match) { for (let i = 0; i < l; i++) { // attrs就是解析得到的,标签中的所有attribute attrs[i] = { name: args[1], value: decodeAttr( value, options.shouldDecodeNewlines ) } } }
以及一个例子: 编译后会将属性值中的 >, ,
虽然这些特殊字符在属性值中不会被浏览器解释为 HTML 标签,但解码操作仍然是必要的。这是因为:
立即学习“前端免费学习笔记(深入)”;
HTML 属性值中如果直接包含 、& 和 ” 等字符,可能会导致 HTML 解析器出现错误,或者造成安全风险(例如 xss 攻击)。 decodeAttr 函数将这些字符实体还原为原始字符,确保了属性值被正确地解析和处理,避免了潜在的解析错误以及安全隐患。 虽然属性值中这些字符不会被浏览器直接渲染成 HTML 标签,但进行解码处理可以保证数据的完整性和一致性,避免后续处理过程中出现不必要的麻烦。 这是一种防御性的编程策略,确保代码的健壮性和安全性。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐