在非转义字符上做什么?
我问了另一个问题,所以我会问别的问题。
根据http://www.c-point.com/javascript_tutorial/special_characters.htm ,有一些转义字符,例如\ n和\ b。 然而/不是其中之一。 在这种情况下会发生什么? ( \/
)是\
被忽略了吗?
我在javascript’http 'http:\/\/www.site.com\/user'
有一个字符串。 并不是说这是一个带有'
so with '
的文字,它看起来像\\/
无论如何我想逃避这个字符串,因此关于非’特殊’转义字符会发生什么的问题。
另一个问题是,如果我有name:\t me
(或"name:\\t me"
是否有一个函数来逃避它所以有一个标签?我正在使用C#,这些字符串来自一个JSON文件
根据Mozilla的说法:
对于未列出的字符,将忽略前面的反斜杠,但不推荐使用此用法。
https://developer.mozilla.org/en/JavaScript/Guide/Values%2c_Variables%2c_and_Literals#section_19
未列出\/
序列,但至少有两种常见用法:
<1>需要在使用/foo/
syntax的正则表达式中转义文字斜杠:
var re = /^http:\/\//;
<2>在HTML中嵌入JavaScript代码时,需要避免使用无效的HTML:
…触发器: 未打开的元素“P”的结束标记
……没有。
如果在作为转义序列没有意义的字符之前找到反斜杠,它将被忽略,即"\/"
和"/"
是Javascript中的相同字符串。
/
字符是正则表达式分隔符,因此只需在正则表达式上下文中进行转义:
/[az]/[0-9]/ // Invalid. /[az]\/[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.
\被评估为\ if \ +下一个字符不是转义序列。
例子:
\ t – >转义序列t – >标签
\\ t – > escape \和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
在C#中,您可以使用反斜杠字符告诉编译器您真正想要的是什么。 编译后,这些转义字符不存在。
如果你使用string myString = "\t";
该字符串实际上将包含一个TAB字符,而不仅仅代表一个。 你可以通过检查myString.Length
来测试它,它是1。
如果你想将字符“反斜杠”和“t”发送给你的JSON客户端,你必须通过转义反斜杠告诉编译器保持双手反斜杠:
string myString = "\\t";
将产生一个由两个字符组成的字符串,即“反斜杠”和“t”。
如果你必须跨越多层逃逸和失败,事情会变得混乱,尝试通过这些层进行调试,看看幕后真正发生了什么。