【问题标题】:How could I escape a & in Haml so that it compiles to & instead of &? (Haml noob)我怎样才能在 Haml 中转义 & 以使其编译为 & 而不是 &? (哈姆菜鸟)
【发布时间】:2012-06-27 01:04:49
【问题描述】:

我正在尝试将 Icomoon 图标字体与 Haml 一起使用,但似乎无法找到逃避 & 的方法,使其仅保留为 & 而不是 &

Icomoon 字体允许您使用带有 data-icon="" 属性的 HTML 实体。如果我只是做一个直接的 HTML 链接,在 HTML 甚至在 Haml 文件中都可以像黄油一样流畅地工作。

但是,由于我正在学习 Haml,我想我会看看这里是否有人愿意推荐解决此问题的最佳方法。

这是发生的事情的一个示例。

这是原来的Haml:

%a(href='/posts' data-icon="&#x0026" aria-hidden='true')

这是它的编译方式:

<a aria-hidden='true' data-icon='&amp;#x0026' href='/posts'>

这是图标字体工作所需的编译方式:

<a aria-hidden='true' data-icon='&#x0026' href='/posts'>

这里是一个代码笔,您可以在其中看到由于放大器而导致的图标呈现方式;补充:http://codepen.io/dandenney/pen/3/6

【问题讨论】:

    标签: haml


    【解决方案1】:

    我不喜欢顶级发帖人完成这个问题的方式。到目前为止,我发现最好的方法是:

    - foo = "&#x0026".html_safe
    %a(href='/posts' data-icon=foo aria-hidden='true')
    

    我对此并不完全满意,但认为这对 Rails 应用程序来说比关闭 HTML 到处转义更好。

    【讨论】:

    • 只是为了对此进行扩展-理想情况下,haml 变量不会是内联的,您可以将其隐藏在视图助手或等效项中,具体取决于您使用的框架/系统(例如。 Rails/Sinatra 等)
    【解决方案2】:

    您可以使用:escape_attrs option来控制属性中的HTML敏感字符是否被转义:

    require 'haml'
    
    haml = "%a(href='/posts' data-icon=\"&#x0026\" aria-hidden='true')"
    
    puts Haml::Engine.new(haml, :escape_attrs => false).to_html
    

    输出:

    <a aria-hidden='true' data-icon='&#x0026' href='/posts'></a>
    

    请注意,这将适用于您的 Haml 模板中的所有属性。

    【讨论】:

    • 我很抱歉延迟批准这个。我是 Haml 的菜鸟,而且我没有在 Rails 环境中使用它,所以我不得不追查如何使它工作。这是一个很好的解决方法,非常感谢!
    • 你会如何在 Rails 中做到这一点?
    • @janechii 将Haml::Template.options[:escape_attrs] = false 放入您的environment.rb。见the docs
    • 感谢马特,但也许我应该更清楚。我该如何根据具体情况执行此操作。例如,我只是希望我的属性之一不逃逸。
    【解决方案3】:

    在我看来,我不喜欢禁用该功能以转义字符的想法。也许您在应用程序中的某个时间点使用了中继。

    对我来说最好的方法是:

    %a{ href: '/', 'data-icon' => "&#10000;".html_safe }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多