Comment puis-je échapper des guillemets simples et doubles dans une chaîne?
Je veux échapper aux guillemets simples et doubles. Je sais les transmettre séparément mais je ne sais pas comment les transmettre tous les deux.
ex: str = "ruby 'on rails" " = ruby 'on rails"
Ma méthode préférée est de ne pas s’inquiéter de l’échappement et d’utiliser à la place %q
, qui se comporte comme une chaîne de guillemets simples (pas d’interpolation ou d’évitement de caractères), ou %Q
pour un comportement de chaîne entre guillemets:
str = %q[ruby 'on rails" ] # like single-quoting str2 = %Q[quoting with #{str}] # like double-quoting: will insert variable
Voir https://docs.ruby-lang.org/en/trunk/syntax/literals_rdoc.html#label-Ssortingngs et recherchez % ssortingngs
.
Utiliser une barre oblique inverse pour échapper des caractères
str = "ruby \'on rails\" "
Vous pouvez utiliser des chaînes Q qui vous permettent d’utiliser n’importe quel délimiteur:
str = %Q|ruby 'on rails" " = ruby 'on rails|
>> str = "ruby 'on rails\" \" = ruby 'on rails" => "ruby 'on rails" " = ruby 'on rails"
J’irais avec un heredoc si je commence à avoir peur de m’échapper. Il en prendra soin pour vous:
ssortingng = <
MARKER définit le début / la fin de la chaîne. commencer la chaîne sur la ligne suivante après avoir ouvert le heredoc, puis terminer la chaîne en utilisant le délinéateur à nouveau sur sa propre ligne.
Cela fait tout l'évitement nécessaire et convertit en une chaîne entre guillemets:
ssortingng => "I don't have to \"worry\" about escaping!!'\"!!\n"
J’utiliserais juste: str = %(ruby 'on rails ")
Parce que juste %
signifie double guillemets (ou% Q) et permet l’interpolation des variables sur la chaîne.
Une mise en garde:
Utiliser %Q[]
et %q[]
pour les comparaisons de chaînes n’est pas intuitivement sûr.
Par exemple, si vous chargez quelque chose destiné à signifier quelque chose de vide, comme ""
ou ''
, vous devez utiliser les séquences d’échappement réelles. Par exemple, disons que qvar
est égal à ""
au lieu de toute chaîne vide.
Cela va évaluer à false
if qvar == "%Q[]"
Comme cela,
if qvar == %Q[]
Tandis que ceci évaluera true
if qvar == "\"\""
J’ai rencontré ce problème lors de l’envoi de vars de ligne de commande d’une stack différente de mon script ruby. Seule la réponse de Gabriel Augusto a fonctionné pour moi.
Voici un exemple d’utilisation de %Q[]
dans un scénario plus complexe:
%Q[ ].html_safe