2011-01-21 20 views
24

Ho bisogno di un backslash per far parte di una stringa. Come posso farlo?Come si crea una stringa in PHP con una barra rovesciata?

+0

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

+0

possibile duplicato di [Perché "\" restituisce un errore durante la memorizzazione in stringa in PHP?] (http://stackoverflow.com/questions/1673186/why-gives-error-while-storing-it-in -string-in-php) – Bobby

risposta

44

Uso le virgolette singole

$string = 'abc\def'; 

Utilizzando i doppi apici

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

In questo esempio particolare il gioco può essere singolarmente. È comunque buona pratica evaderlo. Ma per le virgolette singole allo stesso modo. – mario

+1

Per le virgolette singole questo non funzionerà se la barra rovesciata si trova alla fine della stringa.L'utilizzo della doppia barra rovesciata nelle virgolette singole funziona in tutti gli scenari: l'ultimo esempio è migliore indipendentemente dal tipo di preventivo. – jskidd3

39

Risposta breve:

Utilizzare due backslash.

Risposta lunga:

A volte è possibile utilizzare una singola barra rovesciata, ma a volte è necessario due. Quando si può utilizzare una singola barra rovesciata dipende da due cose:

  • se la stringa è circondato da apici singoli o doppi apici e
  • il carattere immediatamente seguenti il ​​backslash.

Se si dispone di una stringa virgolette il backslash viene trattato come un carattere di escape, in molti casi, quindi è meglio per sfuggire sempre la barra rovesciata con un altro backslash:

$s = "foo\\bar" 

in un solo backslash stringa tra virgolette sarà letterale a meno che non siano seguiti da una singola citazione o da un'altra barra rovesciata. Quindi, per l'uscita una singola barra rovesciata con una singola stringa quotata normalmente è possibile scrivere questo:

$s = 'foo\bar' 

ma per l'uscita di due barre rovesciate di fila avete bisogno di questo:

$s = 'foo\\\\bar' 

Se si utilizza sempre due barre rovesciate voi non sarà mai sbagliato.

+2

+1 per citare le eccezioni quando si usa un singolo \ tra virgolette singole –

+0

Mi piace "se (! preg_mat ch ('/^[\\\,.\d\pL]*$/u', $ _POST ['some_text'])) {...} 'Quindi per evitare la barra rovesciata ho dovuto usare 3 barre rovesciate \\\ . Ho provato con uno e due, non ha funzionato. Non capisco perché 3 – user2118559

+0

@ user2118559 i primi due nella singola stringa quotata generino uno, il terzo sia lasciato solo (non seguito da virgolette singole o barra rovesciata). così due backslash sono inseriti nella stringa che viene passata alla regexp. Quindi il regexp usa il primo per sfuggire al secondo, risultante in un singolo carattere di backspace "reale" (= essere veramente trovato nel testo). Avresti potuto usare quattro invece (quattro diventano due, analizzando la stringa, poi i restanti due diventano uno, analizzando la regexp) come suggerito correttamente da questa risposta. – FrancescoMM

4

Devi scappare da tutti i backslash come "c:\\windows\\".

+0

Questo è un esempio migliore – user3284463

Problemi correlati