Подтвердить что ты не робот

Выключение одиночных и двойных кавычек в строке в рубине?

Как избежать одиночных и двойных кавычек в строке?

Я хочу избежать одиночных и двойных кавычек вместе. Я знаю, как передавать их отдельно, но не знаю, как пройти их оба.

например: str = "ruby 'on rails" " = ruby 'on rails"

4b9b3361

Ответ 1

Мой предпочтительный способ - не беспокоиться об экранировании и использовании% q (который действует как одиночная кавычная строка) или% Q для поведения с двойной кавычкой строки.

так

str = %q[ruby 'on rails"] # Single quoting
str2 = %Q[quoting with #{str}] # will insert variable

Ответ 2

Использовать обратную косую черту для удаления символов

str = "ruby \'on rails\" "

Ответ 3

Вы можете использовать строки Q, которые позволяют использовать любой разделитель, который вам нравится:

str = %Q|ruby 'on rails" " = ruby 'on rails|

Ответ 5

>> str = "ruby 'on rails\" \" = ruby 'on rails"
=> "ruby 'on rails" " = ruby 'on rails"

Ответ 6

Я бы пошел с heredoc, если я начну беспокоиться о побеге. Он позаботится об этом для вас:

string = <<MARKER 
I don't have to "worry" about escaping!!'"!!
MARKER

MARKER определяет начало/конец строки. начните строку на следующей строке после открытия heredoc, затем закончите строку, используя разделитель снова на собственной строке.

Это делает все необходимое и преобразуется в строку с двойными кавычками:

string
=> "I don't have to \"worry\" about escaping!!'\"!!\n"

Ответ 7

Я бы использовал просто: str = %(ruby 'on rails ") Поскольку только % означает двойные кавычки (или% Q) и позволяет интерполировать переменные в строке.

Ответ 8

Одно предупреждение:

Использование %Q[] и %Q[] для сравнения строк не является интуитивно безопасным.

Например, если вы загружаете что-то, что означает означать что-то пустое, например "" или '', вам нужно использовать фактические escape-последовательности. Например, пусть qvar равно "" вместо любой пустой строки.

Это будет оцениваться до false
if qvar == "%Q[]"

Как это будет,
if qvar == %Q[]

Пока это будет оцениваться до true
if qvar == "\"\""

Я столкнулся с этой проблемой при отправке ключей командной строки из другого стека в ruby ​​ script. Только ответ Габриэля Аугусто работал у меня.

Ответ 9

Вот пример использования %Q[] в более сложном сценарии:

  %Q[
    <meta property="og:title" content="#{@title}" />
    <meta property="og:description" content="#{@fullname} profile. #{@fullname} location, ranking, outcomes, and more." />
  ].html_safe