我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文件
答案 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”。
如果你必须跨越多层逃逸和失败,事情变得混乱,尝试通过这些层进行调试,看看幕后发生了什么。