2010-02-03 10 views
28

Solo una stringa. Aggiungi \ 'ad esso ogni volta che c'è una singola citazione.Come aggiungere barre su una stringa in Javascript?

+4

Questo meglio non essere per la prevenzione SQL injection, perché un attaccante facilmente può aggirare questo. Il codice exploit non deve eseguire javascript, invierà semplicemente la richiesta. L'input di escape e disinfezione dovrebbe sempre essere eseguito sul lato server. – rook

+0

Oppure, potresti semplicemente voler risparmiare un po 'di PHP e farlo sul lato client come la domanda specifica. – tim

+0

Quello che Rook dice è che * non dovresti * salvarti un po 'di PHP e farlo sul lato client, perché un utente malintenzionato può facilmente aggirare qualsiasi codice lato client. –

risposta

51

replace opere per la prima citazione, quindi è necessario un piccolo espressione regolare:

str = str.replace(/'/g, "\\'"); 
+4

Questo non è corretto perché è necessario sfuggire alle barre. –

+0

@AlexeyLebedev - Il secondo argomento non è un modello regex: è necessario solo un backslash nella stringa. – Kobi

+0

vediamo: str = "\\ '"; str = str.replace (/ '/ g, "\\'"); –

3
var myNewString = myOldString.replace(/'/g, "\\'"); 
2
var str = "This is a single quote: ' and so is this: '"; 
console.log(str); 

var replaced = str.replace(/'/g, "\\'"); 
console.log(replaced); 

ti dà:

This is a single quote: ' and so is this: ' 
This is a single quote: \' and so is this: \' 
3

A dire il vero, è necessario non sostituire solo le virgolette singole, ma anche quelle già sfuggite:

"first ' and \' second".replace(/'|\\'/g, "\\'") 
5

Una risposta che non hai chiesto potrebbe essere utile, se stai facendo la sostituzione in preparazione dell'invio della stringa in alert() - o qualsiasi altra cosa in cui un singolo carattere di citazione potrebbe farti inciampare .

str.replace("'",'\x27') 

che andrà a sostituire tutte le virgolette singole con il codice esadecimale per singola preventivo.

+4

Queste stringhe sono identiche. A meno che non intendessi "\\ x27". –

25

seguente funzione JavaScript maniglie',", \ b, \ t, \ n, \ f o \ r equivalente di addslashes funzione PHP().

function addslashes(string) { 
    return string.replace(/\\/g, '\\\\'). 
     replace(/\u0008/g, '\\b'). 
     replace(/\t/g, '\\t'). 
     replace(/\n/g, '\\n'). 
     replace(/\f/g, '\\f'). 
     replace(/\r/g, '\\r'). 
     replace(/'/g, '\\\''). 
     replace(/"/g, '\\"'); 
} 
+0

Questa funzione farà l'opposto, spero che questo messaggio possa essere inserito qui ... yikes .. String.prototype.stripSlashes = function() { return this.replace (/\\(.)/ mg, "$ 1"); } –

16

Una stringa può essere sfuggito in modo completo e compatto con JSON.stringify. Fa parte di JavaScript come di ECMAScript 5 e sostenuto da importanti versioni più recenti del browser.

str = JSON.stringify(String(str)); 
str = str.substring(1, str.length-1); 

Usando questo approccio, anche caratteri speciali come il byte null, i caratteri Unicode e interruzioni di riga e \r\n sono escaping correttamente in una dichiarazione relativamente compatta.

+1

Supportato da tutti i browser con una quota di utilizzo globale superiore allo 0,1%, anche se la versione 8 di IE deve essere in modalità standard. – thelem

1
if (!String.prototype.hasOwnProperty('addSlashes')) { 
    String.prototype.addSlashes = function() { 
     return this.replace(/&/g, '&') /* This MUST be the 1st replacement. */ 
      .replace(/'/g, ''') /* The 4 other predefined entities, required. */ 
      .replace(/"/g, '"') 
      .replace(/\\/g, '\\\\') 
      .replace(/</g, '&lt;') 
      .replace(/>/g, '&gt;').replace(/\u0000/g, '\\0'); 
     } 
} 

Uso: avviso (str.addSlashes());

ref: https://stackoverflow.com/a/9756789/3584667

Problemi correlati