2009-04-20 20 views
50

JavaScript'in bir dize kaçması gereken karakterlere ters eğik çizgi eklemek için PHP'nin addslashes (veya addcslashes) işlevi gibi yerleşik bir işlevi var mı? ÖrneğinJavaScript'te Yürütme Dizeleri

bu:

Bu 'tek tırnak' ve "çift tırnak" ile bir demo dizedir.

... olacaktı:

Bu 'tek tırnak \' \ ve \ sahip bir demo dizidir "çift tırnak \".

+7

Hangi amaçla "kaçmak gerekiyor"? Dizelerden kaçmak için birçok farklı sebep vardır ve bunu yapmanın doğru yolu, hedefe bağlı olarak farklı olabilir. (ör., SQL'in eklenmesi durumunda PHP'nin addslashes() genellikle yanlış bir çözümdür: daha iyi bir çözüm parametreli sorgulardır) – Miles

+0

Aslında bir Apple Dashboard Widget geliştiriyorum ve Terminal komutlarında kullanmadan önce dizelerimin düzgün bir şekilde kaçmasını istiyorum "widget.system" ile. –

+0

@SteveHarrison Bu muhtemelen güvensiz. Bunun dışında, keyfi kod çalıştırmayı mümkün kılacak yollar olacaktır. Kabuklar girdikleriyle garip şeyler yaparlar. Güvenilmeyen veriyi geçirmeyi planlıyorsanız, sistem için backflips yapmaktan kurtulmanın tek yolu, başka bir işlevi kullanmaktır, bunun yerine çıkışsız parametreleri geçirmenizi sağlar. –

cevap

75

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

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

Bu durumda cevap "hayır, PHP'nin addslash'leri gibi yerleşik bir işlev yok" –

+0

Evet, cevap budur. –

+5

İyi, Bu işlevi JavaScript'imden eksik olan [sürekli büyüyen] işlevler/yöntemler koleksiyonuma ekleyeceğim ... Teşekkürler! –

36

String üzerinde doğrudan çalışır Paolo Bergantino tarafından sağlanan fonksiyonun bir varyasyonu: Kütüphanenizdeki yukarıdaki kod ekleyerek

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'); 
} 

Eğer mümkün olacak yapmak için:

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

DÜZENLEME: Açıklamalarda

İzleme önerileri, JavaScript kütüphaneleri arasında çatışmalar aşağıdaki kodu ekleyebilirsiniz endişe her kimse:

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

Yerel javascript nesnelerini genişletmenin birçok kötü uygulama tarafından dikkate alındığına dikkat edin. –

+5

@BenjaminGruenbaum: Eğer çakışmalardan korkuyorsanız, –

+1

'u genişletmeden önce 'if (! String.prototype.addSlasches)' öğesini ekleyebilirsiniz. Bu nasıl yardımcı olur? Bir addSlashes işlevi bekliyor ve başka bir tane alıyorsanız, büyük olasılıkla bir hata bulmak çok zor olacak. –

51

Ayrıca çift tırnak için bu deneyebilirsiniz :

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

Bu mükemmel bir cevaptır. Ben alıntılar kaçmak için yöntem inşa 'bariz' yok şaşırdım ama bu iş yapar. Herhangi bir uyarı var mı? – Medorator

+1

JSON.stringify() öğesinin bir dizeyle sonucu, dizenin etrafında çift tırnak işareti bulunan bir dizedir. Değerlendirildiğinde, başladığınız dizeyle sonuçlanacak dizedir. Yani JSON.stringify ('' tırnaklarım '' ile işaretli '') dizgeyi döndürür: "\" quotes \ "dizgimi ile javascript olarak girebilirsiniz, '' string'im \" quotes \ "" '. – dlaliberte

+1

Bu mükemmel. Daha fazla pozlamaya ihtiyaç var. – mattsven