2013-02-26 40 views
21

Tôi có một dự án, trong đó một số biến thể JavaScript được đánh giá. Vì chuỗi cần phải được thoát (chỉ có dấu nháy đơn), tôi đã viết chính mã giống nhau trong một hàm kiểm tra. Tôi có chút sau mã JavaScript khá đơn giản:Thoát dấu nháy đơn trong chuỗi JavaScript để đánh giá JavaScript

function testEscape() { 
    var strResult = ""; 
    var strInputString = "fsdsd'4565sd"; 

    // Here, the string needs to be escaped for single quotes for the eval 
    // to work as is. The following does NOT work! Help! 
    strInputString.replace(/'/g, "''"); 

    var strTest = "strResult = '" + strInputString + "';"; 
    eval(strTest); 
    alert(strResult); 
} 

Và tôi muốn thông báo với nó, nói: fsdsd'4565sd.

+0

Cách tiếp cận tương đối an toàn hơn có thể là 'var strResult = eval (" ("+ strInputString +") ");'. Ngoài ra, 'STRING' là không thay đổi, do đó' string.replace() '** trả về ** kết quả được thay thế, chứ không phải ** sửa đổi ** chuỗi. – Passerby

+1

Đây có phải là những gì bạn mong đợi http://jsfiddle.net/ebTtp/ – ssilas777

Trả lời

62

Cái này là .replace() không sửa đổi các chuỗi chính nó, vì vậy bạn nên viết một cái gì đó như:

strInputString = strInputString.replace(... 

Nó cũng có vẻ như bạn không làm nhân vật thoát một cách chính xác. Sau đây là làm việc cho tôi:

strInputString = strInputString.replace(/'/g, "\\'"); 
+0

Có, đây là nó! Cảm ơn bạn, tôi biết đó là một sai lầm ngớ ngẩn ở đâu đó. –

+0

Đối với các mohicans ActionScript còn lại trên mạng, công việc này: lời chào var: String = "l'advancement"; greet = greet.split ("'"). Join ("\\'"); ExternalInterface.call ("function() {console.log ('" + greet + "')}"); – Stepan

-3
strInputString = strInputString.replace(/'/g, "''"); 
2

Tôi đồng ý rằng đây var formattedString = string.replace(/'/g, "\\'"); hoạt động rất tốt, nhưng kể từ khi tôi sử dụng phần này của mã trong PHP với khuôn khổ Prado (bạn có thể đăng ký các tập lệnh js trong một lớp học PHP) Tôi cần mẫu này làm việc bên trong dấu ngoặc kép.

Giải pháp phù hợp với tôi là bạn cần đặt ba số \ và thoát khỏi dấu ngoặc kép. "var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"

Tôi trả lời câu hỏi đó vì tôi gặp khó khăn khi tìm thấy rằng ba \ là công việc xung quanh.

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