2011-01-21 38 views
24

Necesito una barra diagonal inversa para ser parte de una cadena. ¿Cómo puedo hacerlo?¿Cómo se hace una cadena en PHP con una barra invertida en ella?

+0

* (de referencia) * [Strings] (http://de.php.net/manual/en/language.types. string.php) – Gordon

+0

posible duplicado de [¿Por qué? \ "da error al almacenarlo en cadena en PHP?] (http://stackoverflow.com/questions/1673186/why-gives-error-while-storing-it-in -string-en-php) – Bobby

Respuesta

44

Uso de comillas simples

$string = 'abc\def'; 

Uso de comillas dobles

$string = "abc\\def"; 
+2

En este ejemplo particular, la reacción podría ser individual. Sin embargo, es una buena práctica escapar de ella. Pero para las comillas simples por igual. – mario

+1

Para comillas simples, esto no funcionará si la barra invertida está al final de la cadena.El uso de doble barra diagonal inversa en comillas simples funciona en todos los escenarios; el último ejemplo es mejor sin importar el tipo de comillas. – jskidd3

39

Respuesta corta:

usar dos barras invertidas.

Respuesta larga:

A veces se puede usar una sola barra invertida, pero a veces se necesitan dos. Cuando se puede usar una sola barra invertida depende de dos cosas:

  • si la cadena está rodeado por comillas simples o dobles y
  • el carácter inmediatamente después de la barra invertida.

Si usted tiene una cadena de comillas dobles de la barra invertida se trata como un carácter de escape en muchos casos lo que es mejor para escapar siempre la barra invertida con otra barra invertida:

$s = "foo\\bar" 

en una sola barras invertidas cadena entre comillas será literal a menos que sea seguido por una comilla simple u otra barra invertida. Así que a la salida de una sola barra invertida con una sola cadena entre comillas que normalmente puede escribir lo siguiente:

$s = 'foo\bar' 

sino a la salida dos barras invertidas en una fila que necesita esto:

$s = 'foo\\\\bar' 

Si siempre utiliza dos barras invertidas se nunca estará mal.

+2

1 para citar las excepciones cuando se utiliza una sola \ entre comillas simples –

+0

lo hice como 'if (! preg_mat ch ('/^[\\\,.\d\pL]*$/u', $ _POST [ 'some_text'])) {...} 'Así que para escapar barra invertida que tenía que utilizar 3 barras invertidas \\\ . Intenté con uno y dos, no funcionó. No entiendo por qué 3 – user2118559

+0

@ user2118559 los dos primeros en la cadena entre comillas simples generan una, la tercera se queda solo (no seguida de comilla simple o barra invertida). entonces dos barras invertidas se insertan en la cadena que se pasa a la expresión regular. Luego, la expresión regular usa la primera para escapar de la segunda, lo que da como resultado un único carácter de retroceso "real" (= que realmente se encuentra en el texto). Podría haber usado cuatro en su lugar (cuatro se convierten en dos, analizar la cadena, luego los dos restantes se convierten en uno, analizar la expresión regular) como sugiere esta respuesta. – FrancescoMM

4

Tienes que escapar de todas las barras diagonales inversas como "c:\\windows\\".

+0

Este es un mejor ejemplo – user3284463

Cuestiones relacionadas