Tôi đang cố gắng viết một phương thức giống như mysqli_real_escape_string
trong PHP. Phải mất một chuỗi và thoát khỏi bất kỳ ký tự 'nguy hiểm' nào. Tôi đã tìm một phương pháp mà sẽ làm điều này cho tôi nhưng tôi không thể tìm thấy một. Vì vậy, tôi đang cố gắng để viết một mình.Ruby: Thoát các ký tự đặc biệt trong một chuỗi
Đây là những gì tôi có cho đến nay (Tôi đã thử nghiệm mô hình tại Rubular.com và nó làm việc):
# Finds the following characters and escapes them by preceding them with a backslash. Characters: ' " . */\ -
def escape_characters_in_string(string)
pattern = %r{ (\'|\"|\.|\*|\/|\-|\\) }
string.gsub(pattern, '\\\0') # <-- Trying to take the currently found match and add a \ before it I have no idea how to do that).
end
Và tôi đang sử dụng start_string
như chuỗi Tôi muốn thay đổi, và correct_string
như những gì tôi muốn start_string
biến thành:
start_string = %("My" 'name' *is* -john- .doe. /ok?/ C:\\Drive)
correct_string = %(\"My\" \'name\' \*is\* \-john\- \.doe\. \/ok?\/ C:\\\\Drive)
Can ai đó cố gắng và giúp tôi xác định lý do tại sao tôi không nhận được kết quả mong muốn của tôi (correct_string
) hoặc cho tôi biết nơi tôi có thể tìm thấy một phương pháp mà thực hiện điều này, hoặc thậm chí nói với m tốt hơn e cả hai? Cảm ơn rất nhiều!
Vì vậy, bạn đặt 'start_string' vào' escape_characters_in_string' và bạn không có được những gì bạn' đang mong đợi? Sản lượng không chính xác đó là gì? Bạn đã cho chúng tôi những gì bạn mong đợi để xem, bây giờ hãy sử dụng những gì bạn thực sự thấy ... – masher
Khi tôi 'đặt' kết quả của' escape_characters_in_string (start_string) ', không có gì thay đổi; nó in ra nội dung của 'start_string' – agentbanks217
Regexp.escape (str) –