如何在 Ruby 中转义 HTML 属性值中的双引号?

How to escape double quotes in HTML attribute value in Ruby?

ruby 是否有转义转义引号的功能?喜欢

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

作为

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

简单的方法就是做

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

但看起来很奇怪

要在 HTML 属性值中正确编码双引号,有几种方法:

  • 如果属性值本身由 '...' 分隔,则您可以使用未转义的 ",反之亦然:(就像 Ruby 中的字符串一样)
    <meta property="og:name" content='some "thing"' />
    
  • 如果属性值由"..."分隔,可以使用双引号的数字字符引用&#34;
    <meta property="og:name" content='some &#34;thing&#34;' />
    
  • 或其字符实体引用&quot;
    <meta property="og:name" content="some &quot;thing&quot;" />
    

在 Ruby 中,您可以在此处为元标记字符串调用 CGI.escapeHTML: (I'm using Ruby's %(...) percent string literal,因此我不必转义所有 ")

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;" />