2010-02-03 36 views
28

Chỉ một chuỗi. Thêm \ 'vào nó mỗi lần có một dấu nháy đơn.Làm cách nào để thêm dấu gạch chéo vào chuỗi trong Javascript?

+4

Điều này không tốt hơn đối với phòng ngừa tiêm sql, vì kẻ tấn công có thể dễ dàng bỏ qua điều này. Mã khai thác không phải thực thi javascript của bạn, nó sẽ chỉ gửi yêu cầu. Thoát và vệ sinh đầu vào phải luôn luôn được thực hiện ở phía máy chủ. – rook

+0

Hoặc, bạn có thể chỉ muốn tiết kiệm cho mình một số PHP và làm điều đó ở phía khách hàng như câu hỏi đặc biệt yêu cầu. – tim

+0

Điều Rook đang nói là bạn * không nên * tự lưu lại một số PHP và thực hiện nó ở phía máy khách, bởi vì kẻ tấn công có thể dễ dàng bỏ qua bất kỳ mã phía máy khách nào. –

Trả lời

51

replace công trình cho các báo đầu tiên, vì vậy bạn cần một biểu hiện thường xuyên nhỏ:

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

Điều này là không chính xác vì bạn cũng cần phải thoát khỏi dấu gạch chéo. –

+0

@AlexeyLebedev - Đối số thứ hai không phải là mẫu regex - bạn chỉ cần một dấu gạch chéo ngược trong chuỗi. – Kobi

+0

xem: 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); 

Cung cấp cho bạn:

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

Để chắc chắn, bạn cần phải không chỉ thay thế các dấu nháy đơn, nhưng cũng có thể thay thế các dấu nháy đơn:

5

Câu trả lời bạn không yêu cầu có thể hữu ích, nếu bạn đang thực hiện thay thế để chuẩn bị gửi chuỗi vào cảnh báo() - hoặc bất kỳ điều gì khác mà một nhân vật báo giá có thể đi bạn .

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

Điều đó sẽ thay thế tất cả các dấu nháy đơn bằng mã số mã hex cho một trích dẫn.

+4

Các chuỗi đó giống hệt nhau. Trừ khi bạn có nghĩa là '\\ x27'. –

25

Tiếp theo hàm JavaScript xử lý',", \ b, \ t \ n, \ f hoặc \ r tương đương với addslashes php function().

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

Chức năng này sẽ làm ngược lại, hy vọng điều này được phép đăng ở đây ... y2 .. String.prototype.stripSlashes = function() { trả lại this.replace (/\\(.)/ mg, "$ 1"); } –

16

Một chuỗi có thể được thoát một cách toàn diện và đầy đủ sử dụng JSON.stringify. Nó là một phần của JavaScript của ECMAScript 5 và được hỗ trợ bởi các phiên bản trình duyệt mới hơn lớn.

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

Sử dụng phương pháp này, cũng ký tự đặc biệt như các byte null, các ký tự unicode và ngắt dòng \r\n được thoát đúng cách trong một tuyên bố tương đối nhỏ gọn.

+1

Được hỗ trợ bởi tất cả các trình duyệt có tỷ lệ sử dụng toàn cầu lớn hơn 0,1%, mặc dù phiên bản 8 của IE phải ở chế độ tiêu chuẩn. – 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'); 
     } 
} 

Cách sử dụng: alert (str.addSlashes());

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

Các vấn đề liên quan