stripcslashes()
PHP stripcslashes() decodifica le sequenze di escape in stile C (\n, \t, \xHH, codici ottali) in caratteri reali. L'inverso esatto di addcslashes().
Introduzione
La funzione stripcslashes() di PHP decodifica una stringa che contiene sequenze di escape in stile C. Interpreta sequenze come \n (nuova riga), \t (tabulazione), \r (ritorno a capo), \xHH (esadecimale) e \NNN (ottale), convertendo ciascuna nel carattere effettivo che rappresenta. Quando un backslash precede un carattere ordinario (che non fa parte di una sequenza riconosciuta), il backslash viene semplicemente eliminato.
È l'inverso esatto di addcslashes(): tutto ciò che addcslashes() esegue l'escape, stripcslashes() lo ripristina. Questa è la differenza principale rispetto a stripslashes(), che rimuove soltanto i backslash aggiunti da addslashes() e non interpreta le sequenze di escape.
Questa pagina illustra la sintassi, il modo in cui viene decodificato ogni tipo di sequenza di escape, un ciclo completo di andata e ritorno con addcslashes() e il tranello più comune legato alle stringhe PHP tra apici doppi.
Sintassi
stripcslashes(string $string): string| Parametro | Descrizione |
|---|---|
$string | La stringa da decodificare. Può contenere sequenze di escape in stile C e/o backslash letterali. |
Valore di ritorno: una nuova stringa con le sequenze di escape decodificate. La stringa originale non viene modificata.
Esempio di base
In PHP, il letterale tra apici doppi "Hello\\ World\\!" riduce già ogni \\ a un singolo backslash, quindi il valore passato alla funzione è Hello\ World\!. Lo spazio e il carattere ! non fanno parte di alcuna sequenza di escape, perciò stripcslashes() rimuove i backslash che li precedono. L'output è:
Hello World!Decodifica delle sequenze di escape
A differenza di stripslashes(), stripcslashes() converte attivamente le sequenze riconosciute in veri caratteri di controllo. Questo esempio usa stringhe sorgente tra apici singoli, in modo che i backslash arrivino alla funzione intatti:
<?php
echo stripcslashes('Line1\nLine2'), "\n"; // \n becomes a real newline
echo stripcslashes('Column1\tColumn2'), "\n"; // \t becomes a real tab
echo stripcslashes('\x41\x42\x43'), "\n"; // hex codes -> ABC
echo stripcslashes('\101\102\103'), "\n"; // octal codes -> ABCOutput:
Line1
Line2
Column1 Column2
ABC
ABCSia \x41 (esadecimale) sia \101 (ottale) corrispondono al codice carattere 65, cioè la lettera A.
Andata e ritorno con addcslashes()
Poiché stripcslashes() inverte addcslashes(), eseguire l'escape di una stringa e poi decodificarla restituisce esattamente il valore originale:
<?php
$original = "Price: \$5\nNew line";
// Escape the dollar sign and the newline.
$escaped = addcslashes($original, "\$\n");
echo $escaped, "\n"; // Price: \$5\nNew line
$restored = stripcslashes($escaped);
var_dump($original === $restored); // bool(true)Output:
Price: \$5\nNew line
bool(true)Apici singoli e apici doppi
La confusione più comune con stripcslashes() riguarda chi elabora i backslash. PHP stesso interpreta le sequenze di escape all'interno delle stringhe tra apici doppi prima ancora che stripcslashes() venga eseguita, quindi una sequenza potrebbe essere già stata decodificata:
<?php
// Double quotes: PHP turns "\n" into a newline first,
// so stripcslashes() never sees the backslash.
echo strlen("\n"); // 1
// Single quotes: the two characters \ and n are passed
// literally, and stripcslashes() does the decoding.
echo strlen(stripcslashes('\n')); // 1Output:
11Quando le sequenze di escape provengono da una fonte esterna (un file, un database, l'input dell'utente), arrivano come caratteri letterali \ + n, quindi stripcslashes() è lo strumento giusto per decodificarle.
Quando usarla
- Per invertire l'output di
addcslashes(). - Per decodificare sequenze di escape in stile C memorizzate come testo letterale (valori di configurazione, righe di log, dati esportati da programmi C).
- Per ripristinare caratteri di controllo come tabulazioni e nuove righe di cui era stato eseguito l'escape per una memorizzazione o un trasporto sicuri.
Per la semplice rimozione dei backslash senza interpretazione delle sequenze di escape, usa invece stripslashes().
Conclusione
stripcslashes() decodifica le stringhe contenenti sequenze di escape in stile C, trasformando in caratteri effettivi i codici \n, \t, esadecimali (\xHH) e ottali (\NNN) ed eliminando i backslash isolati. È l'inverso preciso di addcslashes(), il che la rende affidabile per l'escape con ciclo di andata e ritorno. Tieni presente la distinzione rispetto a stripslashes() e ricorda che le stringhe PHP tra apici doppi possono decodificare le sequenze prima dell'esecuzione della funzione.