【问题标题】:what does \ do on non escape characters?\ 对非转义字符有什么作用?
【发布时间】:2011-05-22 17:53:02
【问题描述】:

asked another question poorly 所以我会问别的。

根据http://www.c-point.com/javascript_tutorial/special_characters.htm 有一些转义字符,例如\n 和\b。然而 / 不是其中之一。在这种情况下会发生什么? (\/) 是否忽略了\

我在 javascript 'http:\/\/www.site.com\/user' 中有一个字符串。并不是说这是' 的文字,所以" 看起来像\\/ 无论如何我想转义这个字符串,因此关于非“特殊”转义字符会发生什么的问题。

另一个问题是我是否有name:\t me(或"name:\\t me" 是否有一个函数可以转义它所以有一个选项卡?我使用的是 C#,这些字符串来自 JSON 文件

【问题讨论】:

  • 你试过看看会发生什么吗?
  • @Saladin Akara:即使我知道 \/ 做了什么,我仍然不知道其他情况,例如 \:。或 \z(这是 a-z,但 z AFAIK 不是特例)

标签: c# javascript json escaping


【解决方案1】:
如果 \ + 下一个字符不是转义序列,则

\ 被评估为 \。

示例:
\t -> 转义序列 t -> 制表符
\\t -> 转义 \ 和 t -> \t
\\ -> 转义序列 \ -> \
\c -> \c (不是转义序列)
\a -> 转义序列 a -> ???

请注意,在完全奇怪的符号上也有转义序列,所以要小心。恕我直言,语言和操作系统之间没有很好的标准。

实际上,它甚至更不标准:在基本的 C '\y' -> y + 警告中,而不是 \y。所以这非常依赖于语言,要小心。 (忽略我下面的评论)。

br,

朱哈

编辑:您使用什么语言?= Java 和 c 的行为略有不同。

C 和 java 似乎有相同的转义,而 python 有不同: http://en.csharp-online.net/CSharp_FAQ:_What_are_the_CSharp_character_escape_sequences
http://www.cerritos.edu/jwilson/cis_182/language_resources/java_escape_sequences.htm
http://www.java2s.com/Code/Python/String/EscapeCodesbtnar.htm

【讨论】:

  • 你是说在javascript中'\/'被评估为'\/`?
  • 我不做java...所以我不知道。在 C 中它的'\/'。我的意思是您正在评估字符串 C# 或 java 的哪种语言?
【解决方案2】:

在 C# 中,您可以使用反斜杠字符来告诉编译器您真正想要什么。但编译后,这些转义字符不存在。

如果您使用string myString = "\t";,该字符串实际上将包含一个TAB 字符,而不仅仅是代表一个。您可以通过检查 myString.Length 来测试它是 1。

但是,如果您想将字符“反斜杠”和“t”发送到您的 JSON 客户端,则必须通过转义反斜杠来告诉编译器不要把手放在反斜杠上:

string myString = "\\t"; 将生成一个由两个字符组成的字符串,“反斜杠”和“t”。

如果您必须跨越多个转义和取消转义层,事情就会变得一团糟,请尝试通过这些层进行调试以查看幕后实际发生的情况。

【讨论】:

  • 我是客户,json 字符串来自一家非常大的公司。接受的答案回答了为什么 json 以这种方式格式化(它的第 2 点)
【解决方案3】:

根据 Mozilla:

对于未列出的字符 [...],前面的反斜杠将被忽略,但这种用法已被弃用,并且 应该避免。

https://developer.mozilla.org/en/JavaScript/Guide/Values%2c_Variables%2c_and_Literals#section_19

\/ 序列未列出,但至少有两种常见用法:

在使用/foo/ 语法的正则表达式中需要转义斜线:

var re = /^http:\/\//;

在HTML中嵌入JavaScript代码时需要避免无效的HTML:

<script type="text/javascript"><!--
alert('</p>')
//--></script>

... 触发:元素“P”的结束标记,它没有打开

<script type="text/javascript"><!--
alert('<\/p>')
//--></script>

...没有。

【讨论】:

  • 哇,您应该“在 HTML 中嵌入 JavaScript 代码时避免无效的 HTML”。 WTF,哇,我想
【解决方案4】:

如果在作为转义序列没有意义的字符之前发现反斜杠,它将被忽略,即"\/""/"在Javascript中是相同的字符串。

/ 字符是正则表达式分隔符,因此它只需要在正则表达式上下文中进行转义:

/[a-z]/[0-9]/   // Invalid.

/[a-z]\/[0-9]/  // Matches a lowercase letter, followed by a slash,
                // followed by a digit.

最后,如果你想将一个反斜杠后跟一个字符折叠成相应的转义序列,你必须替换整个表达式:

string expr = "name:\\t me";       // Backslash followed by `t`.
expr = expr.Replace("\\t", "\t");  // Tab character.

【讨论】:

  • 我不能使用替换 bc 的有效转义符,例如 \" 和 \t 将变为 " 和 t。
猜你喜欢
  • 2015-10-16
  • 2015-12-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2010-10-12
  • 2011-03-24
  • 1970-01-01
  • 2011-09-09
相关资源
最近更新 更多