在 JavaScript 中转义字符串

IT技术 javascript string escaping quotes backslash
2021-02-03 14:37:35

JavaScript 是否有像 PHP 的addslashes(或addcslashes函数那样的内置函数来为需要在字符串中转义的字符添加反斜杠?

例如,这个:

这是一个带有“单引号”和“双引号”的演示字符串。

...会成为:

这是一个带有 \'single-quotes\' 和 \"double-quotes\" 的演示字符串。

5个回答

http://locutus.io/php/strings/addslashes/

function addslashes( str ) {
    return (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
}
\u0000 是一个空字符。我不确定为什么需要删除。
2021-03-15 14:37:35
我们如何在添加新字符串之前检查字符串是否包含斜杠
2021-04-01 14:37:35
那么答案是“不,没有像 PHP 的 addlashes 这样的内置函数”
2021-04-03 14:37:35
很好,我会将此函数添加到我的 [不断增长的] JavaScript 中缺少的函数/方法集合中……谢谢!
2021-04-05 14:37:35
你能解释一下'\u0000'替换吗?谢谢你。
2021-04-08 14:37:35

你也可以试试这个双引号:

JSON.stringify(sDemoString).slice(1, -1);
JSON.stringify('my string with "quotes"').slice(1, -1);
这也会捕获换行符、制表符等,其他答案忽略了这些。没有它变成所有可能的特殊字符的列表 taboot。这是最好的答案。值得注意的是,它只会逃逸"而不是'
2021-03-16 14:37:35
带有字符串的 JSON.stringify() 的结果是一个带有双引号的字符串。它是在评估时将产生与您开始时相同的字符串的字符串。因此 JSON.stringify('my string with "quotes"') 返回字符串:"my string with \"quotes\"",您可以在 JavaScript 中将其输入为 '"my string with \"quotes\""'。
2021-03-31 14:37:35
一个缺点是\x00不支持类似东西,而是用更长的\u0000.
2021-04-02 14:37:35
美观、优雅、高效。用它来调试我正在编写的一些解析器 - 非常有用
2021-04-05 14:37:35
这是一个很好的答案。我很惊讶没有“明显”的内置方法来转义引号,但这可以完成工作。有什么注意事项吗?
2021-04-11 14:37:35

Paolo Bergantino提供的直接作用于 String的函数的变体

String.prototype.addSlashes = function() 
{ 
   //no need to do (str+'') anymore because 'this' can only be a string
   return this.replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
} 

通过在您的库中添加上面的代码,您将能够执行以下操作:

var test = "hello single ' double \" and slash \\ yippie";
alert(test.addSlashes());

编辑:

按照评论中的建议,谁关心 JavaScript 库之间的冲突,可以添加以下代码:

if(!String.prototype.addSlashes)
{
   String.prototype.addSlashes = function()... 
}
else
   alert("Warning: String.addSlashes has already been declared elsewhere.");
值得注意的是,许多不好的做法都认为扩展本机 javascript 对象。
2021-03-14 14:37:35
这究竟有什么帮助?如果您期待一个 addSlashes 函数而您得到另一个函数,那么您最终可能会遇到一个很难找到的错误。如果有冲突,最好抛出异常
2021-03-15 14:37:35
@BT:好吧,addSlashes函数实际上应该以一种或另一种方式添加斜杠。无论如何,我更新了答案中的代码以反映您的建议。
2021-03-18 14:37:35
@BenjaminGruenbaum:如果您害怕冲突,可以if(!String.prototype.addSlasches)在扩展之前添加
2021-04-08 14:37:35

使用 encodeURI()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

转义字符串中几乎所有有问题的字符,以进行正确的 JSON 编码和传输,以便在 Web 应用程序中使用。这不是一个完美的验证解决方案,但它抓住了唾手可得的果实。

你也可以用这个

let str = "hello single ' double \" and slash \\ yippie";

let escapeStr = escape(str);
document.write("<b>str : </b>"+str);
document.write("<br/><b>escapeStr : </b>"+escapeStr);
document.write("<br/><b>unEscapeStr : </b> "+unescape(escapeStr));

小心使用escape(),它在附件 B 中,这意味着不推荐使用但不受欢迎的副作用。MDN阅读更多
2021-03-31 14:37:35