what does \\ do on non escape characters?

2019-06-22 13:27发布

问题:

I asked another question poorly so i'll ask something else.

According to http://www.c-point.com/javascript_tutorial/special_characters.htm there are a few escape characters such as \n and \b. However / is not one of them. What happens in this case? (\/) is the \ ignored?

I have a string in javascript 'http:\/\/www.site.com\/user'. Not that this is a literal with ' so with " it would look like \\/ anyways i would like to escape this string thus the question on what happens on non 'special' escape characters.

And another question is if i had name:\t me (or "name:\\t me" is there a function to escape it so there is a tab? i am using C# and these strings come from a JSON file

回答1:

According to Mozilla:

For characters not listed [...] a preceding backslash is ignored, but this usage is deprecated and should be avoided.

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

The \/ sequence is not listed but there're at least two common usages:

<1> It's required to escape literal slashes in regular expressions that use the /foo/ syntax:

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

<2> It's required to avoid invalid HTML when you embed JavaScript code inside HTML:

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

... triggers: end tag for element "P" which is not open

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

... doesn't.



回答2:

If a backslash is found before a character which is not meaningful as an escape sequence, it will be ignored, i.e. "\/" and "/" are the same string in Javascript.

The / character is the regular expression delimiter, so it only has to be escaped in a regex context:

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

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

Finally, if you want to collapse a backslash followed by a character into the corresponding escape sequence, you'll have to replace the whole expression:

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


回答3:

\ is evaluated as \ if \ + next character is not an escape sequence.

examples:
\t -> escape sequence t -> tab
\\t -> escape \ and t -> \t
\\ -> escape sequence \ -> \
\c -> \c (not an escape sequence)
\a -> escape sequence a -> ???

Note that there are escape sequences also on completely weird symbols, so be careful. IMHO there is no good standard between languages and operating systems.

And actually, its even more non-stardard: in basic C '\y' -> y + warning, not \y. So this is very language dependent, be careful. (disregard my comment below).

br,

Juha

edit: What language are you using?= Java and c have slightly different behavior.

C and java seem to have the same escapes and python has different: 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



回答4:

In C# you can use the backslash character to tell the compiler what you really want. After compiling though, these escape characters do not exist.

If you use string myString = "\t"; the string will actually contain a TAB character, not just represent one. You can test this by checking myString.Length which is 1.

If you want to send the characters "backslash" and "t" to your JSON client however, you'll have to tell the compiler to keep his hands off the backslash, by escaping the backslash:

string myString = "\\t"; will result in a string of two characters, the "backslash" and the "t".

Things get messy if you have to cross multiple layers of escaping and unescaping, try to debug through these layers to see what's really happening under the hood.