W3docs

addslashes()

La funzione addslashes() aggiunge un backslash davanti a determinati caratteri in una string per incorporarli in modo sicuro nel codice.

La funzione addslashes() aggiunge un backslash (\) davanti a determinati caratteri in una string, in modo che possano essere incorporati in sicurezza nel codice o nei dati. Esegue l'escape di quattro caratteri: il singolo apice ('), il doppio apice ("), il backslash (\) stesso e il byte NUL (\0). Ciò è utile quando si deve inserire una string all'interno di un'altra string tra virgolette senza che le virgolette interne interrompano la sintassi circostante.

Sintassi

addslashes(string $string): string

Accetta un unico parametro — la string da sottoporre a escape — e restituisce una nuova string con i backslash aggiunti. La string originale rimane invariata.

ParametroDescrizione
$stringObbligatorio. La string da sottoporre a escape.

Esempio di base

La string seguente contiene sia apici singoli che doppi. Passandola a addslashes() si ottiene una copia con ciascun apice preceduto da escape:

php— editable, runs on the server

L'output è:

This is a string with \'quotes\' and \"double quotes\".

Ogni ' e " ha ora un backslash davanti, così la string può essere inserita in un contesto tra virgolette senza chiudere prematuramente la string circostante.

Annullare il risultato con stripslashes()

addslashes() è l'inverso di stripslashes(). Ciò che la prima funzione aggiunge, la seconda lo rimuove, quindi è possibile fare un viaggio di andata e ritorno di un valore senza perdere dati:

<?php
$original = "O'Reilly's book costs \$5.";
$escaped  = addslashes($original);
$restored = stripslashes($escaped);

echo $escaped . "\n";   // O\'Reilly\'s book costs $5.
echo $restored . "\n";  // O'Reilly's book costs $5.
var_dump($original === $restored); // bool(true)
?>

Vengono rimossi soltanto i backslash inseriti da addslashes() stessa, quindi la string ripristinata corrisponde esattamente all'originale.

Quando utilizzarla

Ricorrere a addslashes() quando si deve incorporare testo all'interno di un'altra string tra virgolette — ad esempio, costruendo un letterale string per un file di esportazione, uno snippet di configurazione o un output che verrà poi analizzato da eval() (il cui uso è generalmente sconsigliato). È un helper di formattazione, non una funzione di escape legata a una destinazione specifica.

addslashes() non è una funzione di sicurezza

Questo è il punto più importante da comprendere. addslashes() non rende una string sicura per le query SQL o per l'output HTML, e utilizzarla in tal modo espone l'applicazione a vulnerabilità:

  • Per le query al database, utilizzare prepared statement con PDO o mysqli, oppure mysqli_real_escape_string() per l'approccio di escape legacy. A differenza di addslashes(), mysqli_real_escape_string() è consapevole della connessione e del charset.
  • Per l'output HTML, utilizzare htmlspecialchars() per neutralizzare <, >, & e le virgolette.

addslashes() non è inoltre compatibile con i caratteri multi-byte: opera byte per byte e può corrompere o generare un escape errato di string in codifiche come Shift-JIS o GBK, motivo per cui non deve essere considerata affidabile per la sicurezza SQL.

Funzioni correlate

  • stripslashes() — rimuove i backslash aggiunti da addslashes().
  • addcslashes() — consente di scegliere esattamente quali caratteri sottoporre a escape.
  • quotemeta() — esegue l'escape dei metacaratteri delle espressioni regolari.
  • htmlspecialchars() — esegue l'escape dei caratteri con significato speciale in HTML.

Esercitazione

Pratica
Qual è la funzione di addslashes() in PHP?
Qual è la funzione di addslashes() in PHP?
Was this page helpful?