2010-12-09 11 views
5

I asked another question poorly así que le preguntaré algo más.¿Qué hace do en los caracteres que no escapan?

De acuerdo con http://www.c-point.com/javascript_tutorial/special_characters.htm hay algunos caracteres de escape como \ n y \ b. Sin embargo/no es uno de ellos. ¿Qué pasa en este caso? (\/) es el \ ignorado?

Tengo una cadena en javascript 'http:\/\/www.site.com\/user'. No es que esto sea literal con ', por lo que con " parecería \\/, de todos modos, me gustaría escapar de esta cadena y, por lo tanto, la pregunta sobre qué sucede con los caracteres de escape no "especiales".

Y otra pregunta es si tuviera name:\t me (o "name:\\t me" hay una función para escapar de ella por lo que hay una pestaña? Estoy usando C# y estas cadenas vengo de un archivo JSON

+1

¿Lo has probado para ver qué pasa? –

+0

@Saladin Akara: Incluso si descubro qué \/does, todavía no sé sobre otros casos como \ :. o '\ z' (que es a-z, pero z AFAIK no es un caso especial) –

Respuesta

4

De acuerdo con Mozilla:

Para los caracteres no se encuentra [...] se ignora una barra inclinada anterior, pero este uso está en desuso y se debe evitar .

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

La secuencia \/ no está en la lista, pero hay al menos dos usos comunes:

< 1> Se requiere para escapar barras literales en expresiones regulares que utilizan la sintaxis /foo/:

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

< 2> Se requiere evitar HTML no válido al incrustar JavaScrip t código HTML en el interior:

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

... desencadena: Etiqueta final para el elemento "P", que es no abrir

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

... no lo hace.

+0

whoa serious should should 'evita HTML no válido cuando incrusta código JavaScript dentro de HTML'. WTF, whoa, pensé

1

Si se encuentra una barra invertida antes un personaje que no es significativo como una secuencia de escape, será ignorado, es decir "\/" y "/" son la misma cadena en Javascript.

el carácter / es el delimitador de expresión regular, por lo que sólo tiene que ser escapado en una expresión regular contexto:

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

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

Por último, si desea contraer una barra invertida seguida por un carácter en la secuencia de escape correspondiente, que tendrá que reemplazar toda la expresión:

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

No puedo usar eso reemplazar bc escapes válidos como \" y \ t se convertirían en "y t. –

1

\ se evalúa como \ si \ + siguiente carácter no es una secuencia de escape

ejemplos:
\ t -> secuencia de escape t -> pestaña
\\ t -> escape \ yt -> \ t
\\ -> Secuencia de escape \ -> \
\ c - > \ c (no es una secuencia de escape)
\ a -> secuencia de escape a -> ???

Tenga en cuenta que también hay secuencias de escape en símbolos completamente extraños, así que tenga cuidado. En mi humilde opinión, no hay un buen estándar entre los idiomas y los sistemas operativos.

Y en realidad, es aún más no estándar: en C '\ y' básico -> advertencia y, no \ y. Así que esto depende mucho del idioma, ten cuidado. (haga caso omiso de mi comentario a continuación).

ancho,

Juha

edición: ¿Qué idioma está usando = Java y C tienen un comportamiento ligeramente diferente.

C y Java parecen tener las mismas se escapa y Python tiene diferentes: 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

+0

¿Está diciendo que en javascript '\ /' se evalúa como '\ /'? –

+0

Yo no hago java ... así que no sé. En C es '\ /'. Me refiero a qué idioma estás evaluando la cadena C# o java? – Juha

0

En C# Se puede utilizar la barra invertida para indicar al compilador lo que realmente quiere. Sin embargo, después de compilar, estos caracteres de escape no existen.

Si utiliza string myString = "\t"; la cadena contendrá realmente un carácter de tabulación, no sólo representan uno. Puede probar esto marcando myString.Length que es 1.

Si desea enviar los caracteres "barra invertida" y "t" a su cliente JSON, tendrá que decirle al compilador que mantenga sus manos alejadas de la barra invertida , al escapar de la barra invertida:

string myString = "\\t"; dará como resultado una cadena de dos caracteres, la "barra invertida" y la "t".

Las cosas se complican si tiene que cruzar varias capas de escape y unescape, tratan de depurar a través de estas capas para ver lo que realmente está sucediendo bajo el capó.

+0

Soy el cliente y las cadenas json provienen de un cuerpo muy grande. La respuesta aceptada responde por qué el json está formateado de esa manera (es el punto 2) –

Cuestiones relacionadas