在非转义字符上做什么?

时间:2010-12-09 09:16:44

标签: c# javascript json escaping

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文件

4 个答案:

答案 0 :(得分:4)

根据Mozilla的说法:

  

对于未列出的字符[...],将忽略前面的反斜杠,但不推荐使用此用法   应该避免。

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

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

&LT 1为卤素;需要在使用/foo/语法的正则表达式中转义文字斜杠:

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

&LT 2 - ;在JavaScript中嵌入JavaScript代码时,需要避免使用无效的HTML:

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

...触发器:元素“P”的结束标记未打开

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

......没有。

答案 1 :(得分:1)

如果在作为转义序列没有意义的字符之前找到反斜杠,它将被忽略,即"\/""/"是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.

答案 2 :(得分:1)

\被评估为\ if \ +下一个字符不是转义序列。

例子:
\ t - &gt;转义序列t - &gt;标签
\\ t - &gt;逃避\和t - &gt; \ t
\\ - &gt;转义序列\ - &gt; \
\ c - &gt; \ c(不是转义序列)
\ a - &gt;转义序列a - &gt; ???

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

实际上,它更加非标准:基本的C'\ y' - &gt; y +警告,而不是\ y。所以这是非常依赖语言的,要小心。 (无视我下面的评论)。

BR,

的Juha

编辑:您使用的语言是什么?= 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

答案 3 :(得分:0)

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

如果使用string myString = "\t";,字符串实际上将包含一个TAB字符,而不仅仅代表一个。您可以通过选中myString.Length来检验这一点。

如果你想将字符“反斜杠”和“t”发送给你的JSON客户端,你必须通过转义反斜杠告诉编译器保持他的反斜杠:

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

如果你必须跨越多层逃逸和失败,事情变得混乱,尝试通过这些层进行调试,看看幕后发生了什么。