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!
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
Vous devez vous connecter pour publier un commentaire.
Votre modèle n'est pas correctement défini dans votre exemple. C'est aussi près que je peux obtenir à la sortie souhaitée.
Sortie
Il va falloir un peu de peaufinage de votre part pour être à 100% mais au moins vous pouvez voir votre modèle en action maintenant.
Content que cela a fonctionné pour vous.
OriginalL'auteur rwilliams
J'ai changé de fonction ci-dessus comme ceci:
C'est génial de travailler pour les regex
OriginalL'auteur Ahmad Hussain
Cela devrait vous aider à démarrer:
OriginalL'auteur the Tin Man
Prendre un coup d'oeil à la ActiveRecord méthodes de désinfection: http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-sanitize_sql_array
OriginalL'auteur ehsanul
Prendre un coup d'oeil à escape_string /quote méthode dans Mysql classe ici
OriginalL'auteur letronje