避免在javascript中转义特殊字符

IT技术 javascript escaping special-characters
2021-03-10 13:05:15

我的服务器返回值为support\testing. 当我在客户端获得这个值时,它可以转义为support testing. \t被转义为制表符空间。

如何避免在 JavaScript 中转义特殊字符?

5个回答

您的服务器需要以正确的转义方式输出字符串。

在这种情况下,您需要在输出中使用反斜杠字符;反斜杠是一个特殊字符,因此应该对其进行转义。

反斜杠的转义序列是\\(即两个反斜杠),但您不需要考虑特定的转义码——如果您正在输出 JS 数据,您应该使用整个字符串的正确转义来输出它,通常意味着您应该使用 JSON 编码。

如今,大多数服务器语言都提供 JSON 编码作为内置功能。您还没有指定您的服务器使用哪种语言,但例如,如果它是用 PHP 编写的,那么您将输出字符串json_encode($string)而不是直接输出$string其他语言提供了类似的功能。这不仅可以保护您免受损坏的反斜杠字符,还可以防止其他错误,例如字符串中的引号或换行符,如果您将它们作为未转义的字符串放入 Javascript 代码中,也会导致错误。

鉴于它是一个网页,上下文堆栈中可能有更多需要转义的上下文。如果它是脚本元素内的字符串输出,那么您需要注意,</script>因为通常简单地转义 javascript 字符串不会对此做任何事情:9
2021-05-08 13:05:15

您可以使用标记的模板文字

var str = (s => s.raw)`support\testing`[0]

匿名箭头函数将作为标签并s.raw包含原始输入

如果您能够更改服务器端代码,则应在此处添加转义字符:"support\\testing"

这将导致预期的结果。

在这种情况下,您应该扩展它。你写的已经在评论中说过了;用户选择发表评论是有充分理由的。我会将其更改为声明,因为您似乎实际上是在向 OP 提问,而不是回答他。
2021-04-30 13:05:15
这实际上是评论,而不是答案。
2021-05-17 13:05:15
@kiamlaluno 它可能看起来像一条评论,但也是一个合法的答案,它将返回操作员想要的东西。
2021-05-18 13:05:15

你可以做一个简单的替换:

str.replace("\t","\\t");

并为您需要替换的其他字符执行此操作。

或更好: str.replace(/\t/g, '\\t');
2021-04-23 13:05:15
这也将改变有意的标签,它只是交换另一个问题
2021-05-12 13:05:15

最佳解决方案

function valid(f) {            
        debugger;
        var s = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?~";
        str = f.value;
        for (var i = 0; i < str.length; i++) {
           if (s.indexOf(str.charAt(i)) != -1) {
              //alert("The box has special characters. \nThese are not allowed.\n");
              f.value = f.value.replace(str.charAt(i), '');// : null;
              return false;
            }
        }
 }