如何在JavaScript中替换或编码左右弯双引号等特殊字符
JavaScript特殊弯引号编码解决方案
问题根因
你当前的代码没有生效,核心原因是\u201c在JavaScript字符串中本身就是“字符的Unicode表示,执行替换后JS引擎会直接把\u201c解析为对应的“字符,所以打印时看起来和原内容没有区别。
解决方案
针对性替换实现
如果仅需要处理左右弯引号这两个特殊字符,直接对转义符\做二次转义即可,代码如下:
var stmt = "select “No.”"; // 双反斜杠会被解析为字面量反斜杠,最终生成你需要的\u201c文本效果 stmt = stmt.replace('“', '\\u201c'); stmt = stmt.replace('”', '\\u201d'); console.log(stmt); // 输出结果:select \u201cNo.\u201d
通用全特殊字符转义
如果需要覆盖所有非ASCII类特殊字符的转义需求,可以使用以下通用工具函数:
function unicodeEscape(str) { return str.replace(/[^\x00-\x7F]/g, match => { // 取字符Unicode编码转16进制,补前导0到4位,拼接\u前缀 return '\\u' + match.charCodeAt(0).toString(16).padStart(4, '0'); }); } var stmt = "select “No.”"; var result = unicodeEscape(stmt); console.log(result); // 输出结果:select \u201cNo.\u201d
场景注意事项
你使用sequelize入库的场景下,需要注意:
- 转义后的字符串本身就是普通ASCII文本,入库、JSON序列化都不会出现乱码问题
- 如果后续需要还原为原始带弯引号的字符串,直接调用
JSON.parse('"' + 转义后字符串 + '"')即可完成解码 - 若你的数据库本身配置了UTF-8编码,也可以选择直接存储原始字符串,仅在需要生成JSON格式输出时调用
JSON.stringify做自动转义即可。
内容的提问来源于stack exchange,提问作者PHP User
相关产品推荐
相关产品推荐

