【问题标题】:avoid to escape a special characters in javascript避免在javascript中转义特殊字符
【发布时间】:2013-07-09 15:12:42
【问题描述】:

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

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

【问题讨论】:

  • 你应该转义服务器端,然后发送到 javascrippt
  • 你可以避免使用反斜杠而不是斜杠。
  • 我很困惑。您想通过更改服务器来避免取消转义,还是在客户端取消转义?
  • 您的服务器使用什么语言输出值?输出 JS 数据时应使用正确的 json 编码。

标签: javascript escaping special-characters


【解决方案1】:

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

在这种情况下,您需要在输出中使用反斜杠字符;反斜杠是一个特殊字符,所以应该转义。

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

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

【讨论】:

  • 鉴于它是一个网页,上下文堆栈中可能有更多的上下文需要转义。如果它是脚本元素内的字符串输出,那么您需要注意</script>,因为通常简单地转义javascript字符串对此没有任何作用:9
【解决方案2】:

您可以使用标记模板文字

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

匿名箭头函数将用作标记,s.raw 包含原始输入

【讨论】:

    【解决方案3】:

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

    这将产生预期的结果。

    【讨论】:

    • 这真的是评论,不是答案。
    • @kiamlaluno 这看起来像是一个评论,但也是一个合法的答案,它将返回操作人员想要的内容。
    • 在这种情况下,您应该展开它。您写的内容已经在评论中说了;用户选择写评论是有充分理由的。我会将其更改为声明,因为您似乎实际上是在向 OP 提问,而不是回答他。
    【解决方案4】:

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

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

    对需要替换的其他字符执行此操作。

    【讨论】:

    • 或更好:str.replace(/\t/g, '\\t');
    • 这也会改变有意的标签,它只是用一个问题换另一个问题
    【解决方案5】:

    最好的解决方案

    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;
                }
            }
     }
    

    【讨论】:

      猜你喜欢
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多