javascript处理特殊字符需分场景选方法:json用json.stringify()自动转义,url用encodeuricomponent()编码参数,html渲染时严格实体编码防xss,正则构造需注意双重转义。

JavaScript 中处理特殊字符,关键不是“怎么手动加反斜杠”,而是分清场景、选对方法。该用 JSON.stringify() 的时候别手拼字符串,该用 encodeURIComponent() 的时候别乱套 escape(),该做 HTML 转义时更不能只转引号和尖括号。
JSON 场景:用 stringify() 自动转义
向后端传数据、生成 JSON 字符串时,最安全的做法是让 JavaScript 自己处理:
- 直接传对象给
JSON.stringify(obj),它会自动把双引号、反斜杠、换行符()、回车()、制表符()等转为标准 JSON 转义序列 - 避免自己拼接
'{"name": "' + name + '"}'—— 一旦name含有"或换行,JSON 就非法 - 注意两个例外字符:
u2028(行分隔符)和u2029(段落分隔符),JSON.stringify()不转义它们,但某些 JS 引擎会报错;如需兼容,可提前替换:str.replace(/[u2028u2029]/g, '\u$&')
URL 场景:用 encodeURIComponent() 编码参数
构造 URL 查询参数或路径片段时,必须确保特殊符号不破坏 URL 结构:
-
encodeURIComponent('用户/测试?name=张三')→%E7%94%A8%E6%88%B7%2F%E6%B5%8B%E8%AF%95%3Fname%3D%E5%BC%A0%E4%B8%89 - 它会编码
/ ? : @ & = + $ , #等 URI 分隔符,而encodeURI()不会——所以不要用encodeURI()编单个参数 -
escape()已废弃,不支持 Unicode,且编码规则不统一,应彻底弃用
HTML 渲染场景:防 XSS 的实体编码
把用户输入插入到 HTML 文本内容(如 innerHTML、textContent 之外的场景)时,必须转义以防止脚本注入:
- 核心要转的字符:
、<code>>、&、"、',还有 ASCII 控制字符(

