Comment puis-je échapper des guillemets simples et doubles dans une chaîne?
Je veux échapper aux guillemets simples et doubles. Je sais comment les passer séparément mais je ne sais pas comment les passer tous les deux.
par exemple: str = "Ruby 'on Rails" " = Ruby 'on Rails"
Ma façon préférée est de ne pas craindre de fuir et d'utiliser plutôt %q
, qui se comporte comme une chaîne entre guillemets (aucune interpolation ni échappement de caractère), ou %Q
pour le 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-Strings et recherchez % strings
.
Utiliser une barre oblique inverse pour échapper des caractères
str = "Ruby \'on Rails\" "
Vous pouvez utiliser les chaînes Q qui vous permettent d'utiliser n'importe quel délimiteur:
str = %Q|Ruby 'on Rails" " = Ruby 'on Rails|
J'irais avec un heredoc si je commence à avoir à craindre de m'échapper. Il s'en occupera pour vous:
string = <<MARKER
I don't have to "worry" about escaping!!'"!!
MARKER
MARKER délimite le début/la fin de la chaîne. commencez la chaîne sur la ligne suivante après avoir ouvert l'hérédoc, puis terminez la chaîne en utilisant à nouveau le délinéateur sur sa propre ligne.
Ceci fait tout l'échappement nécessaire et se convertit en une chaîne à double guillemet:
string
=> "I don't have to \"worry\" about escaping!!'\"!!\n"
>> str = "Ruby 'on Rails\" \" = Ruby 'on Rails"
=> "Ruby 'on Rails" " = Ruby 'on Rails"
Je voudrais juste utiliser: str = %(Ruby 'on Rails ")
Parce que juste %
représente les guillemets doubles (ou% Q) et permet l’interpolation des variables sur la chaîne.
Une mise en garde:
En utilisant %Q[]
et %q[]
pour les comparaisons de chaînes n'est pas intuitivement sûr.
Par exemple, si vous chargez quelque chose qui veut dire quelque chose de vide, comme ""
ou ''
, vous devez utiliser les séquences d'échappement réelles. Par exemple, supposons que qvar
soit égal à ""
au lieu d'une chaîne vide.
Ceci évaluera à false
if qvar == "%Q[]"
Comme cela,if qvar == %Q[]
Bien que cela soit évalué à true
if qvar == "\"\""
J'ai rencontré ce problème lorsque j'ai envoyé des vars de ligne de commande d'une pile différente à mon script Ruby. Only la réponse de Gabriel Augusto a fonctionné pour moi.
Voici un exemple d'utilisation de %Q[]
dans un scénario plus complexe:
%Q[
<meta property="og:title" content="#{@title}" />
<meta property="og:description" content="#{@fullname}'s profile. #{@fullname}'s location, ranking, outcomes, and more." />
].html_safe