10
votes

Ruby: échapper aux caractères spéciaux dans une chaîne

J'essaie d'écrire une méthode identique à celle du mysqli_real_escapape_string dans php. Il faut une chaîne et échappe à tous les caractères «dangereux». J'ai cherché une méthode qui le fera pour moi mais je ne peux pas en trouver un. J'essaie donc d'écrire un seul.

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

et j'utilise start_string comme chaîne que je veux changer et correction_string comme ce que je veux start_string pour se transformer en: xxx

peut essayer de me aider à déterminer pourquoi je ne me désipe pas Sortie ( correction_string ) ou dites-moi où je peux trouver une méthode qui le fait, vaut mieux me dire les deux? Merci beaucoup!


2 commentaires

Vous mettez donc start_string dans Escape_characters_in_string et vous n'obtenez pas ce que vous attendez? Quelle est la sortie incorrecte? Vous nous avez donné ce que vous attendez de voir, dites maintenant à utiliser ce que vous voyez réellement ...


Lorsque je met les résultats de Escape_characters_in_string (start_string) , rien ne change; Il imprime le contenu du start_string


5 Réponses :


1
votes

Jetez un coup d'œil aux méthodes de désinfection Aciverecord: http: / /api.rubyonrails.org/classes/acterecord/base.html#method-c-sanitize_sql_array


0 commentaires

0
votes

Jetez un oeil à la méthode d'Escape_string / de devis dans la classe MySQL ici


0 commentaires

2
votes

Cela devrait vous aider à démarrer:

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


0 commentaires

13
votes

Votre motif n'est pas défini correctement dans votre exemple. Ceci est aussi proche que possible d'accéder à la sortie souhaitée.

sortie xxx

Il va prendre des modifications de votre part pour l'obtenir à 100% mais au moins vous peut voir votre modèle en action maintenant. xxx


0 commentaires

4
votes

J'ai changé de fonction supérieure à celle-ci:

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


0 commentaires