web-dev-qa-db-fra.com

Échapper des chaînes en JavaScript

JavaScript a-t-il une fonction intégrée comme la fonction addslashes (ou addcslashes) de PHP pour ajouter des barres obliques inverses aux caractères qui doivent être échappés dans une chaîne?

Par exemple, ceci:

Il s'agit d'une chaîne de démonstration avec "guillemets simples" et "guillemets doubles".

...deviendrait:

Il s'agit d'une chaîne de démonstration avec\'guillemets simples \' et\"guillemets doubles \".

61
Steve Harrison

http://locutus.io/php/strings/addslashes/

function addslashes( str ) {
    return (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
}
88
Paolo Bergantino

Vous pouvez également essayer ceci pour les guillemets doubles:

JSON.stringify(sDemoString).slice(1, -1);
JSON.stringify('my string with "quotes"').slice(1, -1);
69
Storm

Une variation de la fonction fournie par Paolo Bergantino qui fonctionne directement sur String:

String.prototype.addSlashes = function() 
{ 
   //no need to do (str+'') anymore because 'this' can only be a string
   return this.replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
} 

En ajoutant le code ci-dessus dans votre bibliothèque, vous pourrez faire:

var test = "hello single ' double \" and slash \\ yippie";
alert(test.addSlashes());

MODIFIER:

En suivant les suggestions dans les commentaires, quiconque est préoccupé par les conflits entre les bibliothèques JavaScript peut ajouter le code suivant:

if(!String.prototype.addSlashes)
{
   String.prototype.addSlashes = function()... 
}
else
   alert("Warning: String.addSlashes has already been declared elsewhere.");
39
Marco Demaio

Utilisez encodeURI ()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

Échappe à peu près tous les caractères problématiques dans les chaînes pour un encodage JSON et un transit appropriés pour une utilisation dans les applications Web. Ce n'est pas une solution de validation parfaite, mais elle attrape les fruits bas.

2
tcmoore