Как избежать двойных кавычек в HTML значении атрибута в Ruby? - PullRequest
0 голосов
/ 03 февраля 2020

Имеет ли ruby какую-либо функцию для экранирования кавычек? как

name = "some \"thing\""
"<meta property=\"og:title\" content=\"#{name}\" />"

как

"<meta property=\"og:title\" content=\"some \\\"thing\\\"\" />"

Простой способ просто сделать

name.gsub("\"", "\\\"")

, но выглядит странно

1 Ответ

0 голосов
/ 03 февраля 2020

Чтобы правильно кодировать двойную кавычку в значении атрибута HTML, есть несколько способов:

  • Вы можете использовать неоткрытый ", если само значение атрибута ограничено '...' или наоборот: (точно так же, как строки в Ruby)
    <meta property="og:name" content='some "thing"' />
    
  • Если значение атрибута ограничено "...", вы можете использовать числовую ссылку c в двойных кавычках &#34;:
    <meta property="og:name" content='some &#34;thing&#34;' />
    
  • или ссылка на его символьную сущность &quot;:
    <meta property="og:name" content="some &quot;thing&quot;" />
    

Из Ruby вы можете позвонить CGI.escapeHTML: ( Я использую Ruby %(...) процентный строковый литерал здесь для строки метатега, поэтому мне не нужно экранировать все ")

require 'cgi'

name = 'some "thing"'
meta = %(<meta property="og:name" content="#{CGI.escapeHTML(name)}" />)
#=> "<meta property=\"og:name\" content=\"some &quot;thing&quot;\" />"

puts meta

Или tag помощник, если вы используете Rails:

<%= tag(:meta, property: 'og:name', content: name) %>

Оба вышеприведенных вывода:

<meta property="og:name" content="some &quot;thing&quot;" />
...