Ruby: l'Échappement des caractères spéciaux dans une chaîne de caractères

Je suis en train d'écrire une méthode qui est la même que mysqli_real_escape_string en PHP. Il prend une chaîne et échappe à tout ce qui est dangereux personnages. J'ai cherché une méthode qui va le faire pour moi, mais je ne peux pas en trouver un. Donc, je suis en train d'écrire sur mon propre.

C'est ce que j'ai jusqu'à présent (j'ai testé le modèle à Rubular.com et cela a fonctionné):

# 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

Et je suis en utilisant start_string que la chaîne de caractères que je veux changer, et correct_string comme ce que je veux start_string à son tour en:

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

Quelqu'un peut-il essayer de m'aider à déterminer pourquoi je ne reçois pas mon choix de sortie (correct_string) ou me dire où je peux trouver une méthode qui fait cela, ou mieux encore me dire deux à la fois? Merci beaucoup!

Si vous mettez start_string en escape_characters_in_string et vous n'obtenez pas ce que vous attendez? Qu'est-ce que cette fausse sortie? Vous avez donné ce que vous vous attendez à voir, maintenant, dites-utilisez ce que vous en fait voir...
Quand je puts les résultats de escape_characters_in_string(start_string), rien ne change; il imprime le contenu de la start_string
Regexp.escape(str)

OriginalL'auteur agentbanks217 | 2010-11-10