2010-11-10 16 views
7

में विशेष वर्णों से बचने के लिए मैं एक विधि लिखने की कोशिश कर रहा हूं जो PHP में mysqli_real_escape_string जैसा ही है। यह एक स्ट्रिंग लेता है और किसी भी 'खतरनाक' पात्रों से बच निकलता है। मैंने एक ऐसी विधि की तलाश की है जो मेरे लिए यह करेगी लेकिन मुझे कोई नहीं मिल रहा है। तो मैं खुद को लिखने की कोशिश कर रहा हूं।रूबी: स्ट्रिंग

यह वही है मैं अब तक किया है (मैं Rubular.com पर पैटर्न परीक्षण किया है और यह काम किया):

# 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 

और मैं स्ट्रिंग मैं बदलना चाहते हैं के रूप में start_string उपयोग कर रहा हूँ, और मैं क्या चाहते start_string रूप correct_string में बदलने के लिए:

start_string = %("My" 'name' *is* -john- .doe. /ok?/ C:\\Drive) 
correct_string = %(\"My\" \'name\' \*is\* \-john\- \.doe\. \/ok?\/ C:\\\\Drive) 

कर सकते हैं किसी को कोशिश करते हैं और मुझे पता लगाने में मदद क्यों मैं अपने वांछित निर्गम (correct_string) नहीं मिल रहा है या मुझे बताओ जहां मैं एक विधि है कि यह करता है, या और भी बेहतर मीटर बता पा सकते हैं ई दोनों? आपका बहुत बहुत धन्यवाद!

+0

तो तुम '' start_string' escape_characters_in_string' में डाल दिया है और आप नहीं मिलता है क्या तुम ' उम्मीद कर रहे हैं? वह गलत आउटपुट क्या है? आपने हमें जो देखा है उसे हमने दिया है, अब आप जो वास्तव में देखते हैं उसका उपयोग करें ... – masher

+0

जब मैं 'escape_characters_in_string (start_string) 'के परिणाम डालता हूं, कुछ भी नहीं बदलता है; यह 'start_string' – agentbanks217

+0

Regexp.escape (str) –

उत्तर

9

आपका पैटर्न प्रतिसाद नहीं आपके उदाहरण में सही ढंग से परिभाषित नहीं किया गया है। यह उतना करीब है जितना मैं आपके वांछित आउटपुट पर जा सकता हूं।

आउटपुट

"\\\"My\\\" \\'name\\' \\*is\\* \\-john\\- \\.doe\\. \\/ok?\\/ C:\\\\Drive" 

यह आपकी ओर से कुछ फेरबदल लेने के लिए यह 100% प्राप्त करने के लिए लेकिन कम से कम अब आप कार्रवाई में अपने पैटर्न देख सकते हैं जा रहा है।

def self.escape_characters_in_string(string) 
    pattern = /(\'|\"|\.|\*|\/|\-|\\)/ 
    string.gsub(pattern){|match|"\\" + match} # <-- Trying to take the currently found match and add a \ before it I have no idea how to do that). 
    end 
+0

की सामग्री को प्रिंट करता है यह ऐसा हुआ! आपका बहुत बहुत धन्यवाद! – agentbanks217

+0

खुशी है कि यह आपके लिए काम करता है। – rwilliams

0

escape_string Mysql कक्षा में/उद्धरण विधि पर एक नजर डालें here

2

यह मिलना चाहिए आप आरंभ:

print %("'*-.).gsub(/["'*.-]/){ |s| '\\' + s } 
\"\'\*\-\. 
3

मैं इस तरह समारोह ऊपर बदल गए हैं:

def self.escape_characters_in_string(string) 
    pattern = /(\'|\"|\.|\*|\/|\-|\\|\)|\$|\+|\(|\^|\?|\!|\~|\`)/ 
    string.gsub(pattern){|match|"\\" + match} 
    end 

इस regex के लिए महान काम कर रहा है

+0

अपने सभी विशेष पात्रों को कवर करें .... –

संबंधित मुद्दे