【问题标题】:How to insert special HTML-symbols with HAML如何使用 HAML 插入特殊的 HTML 符号
【发布时间】:2011-09-12 10:06:59
【问题描述】:

当我说:

%p= item.price + " dollars"

我来了

50&nbsp ;美元

而不是具有不可破坏的空格符号。

如何使用 HAML 插入这个和另一个特殊符号?

【问题讨论】:

  • 好问题-谢谢提问

标签: ruby-on-rails-3 special-characters haml


【解决方案1】:

您可以在字符串中使用\xa0 而不是 。 0xa0 是不间断空格的 ASCII 码。

【讨论】:

    【解决方案2】:

    怎么样

    %p= item.price + " dollars".html_safe
    

    【讨论】:

    • 在 link_to 中插入不间断空格也很有用,例如 = link_to "Some Link".html_safe, "/someurl"
    • 我发现这个策略实际上不起作用。我相信发生的事情是第一个字符串 (item.price) 不是 html 安全的。当您进行添加时,您最终会得到一个未标记为 html_safe 的字符串,并且最终会在视图中显示 &nbsp。我喜欢下面的答案(您在其中插值,然后是 html_safe)。另一种选择是在两行上呈现 - item.price 在一行(没有 html 安全)和  dollars 在下一行。
    • 我明白你的意思。我想自从我写下这个答案以来的 20 个月里发生了一些变化。然后我更喜欢两行方法而不是将 item.price 标记为 html_safe...
    • 甜蜜!这对我也有帮助。
    • 尽管在 haml 中您真正需要做的就是打破 ruby​​(没有等号)并使用字符串插值 %p #{item.price} 美元,或者使用 &nbsp 创建一个换行符;美元。这很可能是最近的 haml 更新,因为这是在 11 年发布的
    【解决方案3】:

    插值选项:

    %p= "#{item.price} dollars".html_safe
    

    【讨论】:

    • 虽然我没有否决您的回答,但我认为它确实存在潜在问题,因为它将 item.price 标记为 html 安全,这可能会导致 XSS 问题...鉴于此问题中的上下文,我们无法判断当然:-)
    • 确实如此,但被投票两次的答案使用了相同的 html_safe 选项,此外,这是让 HAML 输出这样的内联特殊字符的唯一方法。
    • 但是您的答案是将item.price 的内容标记为html_safe,这就是潜在问题出现的地方。另一个答案将字符串常量标记为 html_safe 这是一个更好的解决方案。
    • 你可能是对的。就像前面提到的 HakonB 一样,鉴于问题的上下文,我们无法确定插入 item_price 可能会出现什么问题(如果有的话) - 这只是问题的另一个可能答案。
    【解决方案4】:

    这个答案是针对一个稍微不同的问题,但我发现这个问题正在搜索它...
    如果您有一个提交标签%input{ :type => "submit", :value => " dollars", :name => "very_contrived" },即使您在:value 上抛出html_safe,它也不会评估html。
    解决方案是使用 rails helper...duh

    = submit_tag " dollars".html_safe
    

    这很明显,但它让我绊倒了。遗留代码 + rails 升级 = 这种东西:P

    【讨论】:

      【解决方案5】:

      使用!= 而不是=

      请参阅 haml 参考中的“Unescaping HTML”:http://haml.info/docs/yardoc/file.REFERENCE.html#unescaping_html

      【讨论】:

        【解决方案6】:

        我尝试以不同的方式使用html_safe,但都没有奏效。按照 ngn 的建议使用 \xa0 也不起作用,但它让我尝试了不间断空间的 Unicode 转义,这确实有效:

        "FOO\u00a0BAR"
        

        甚至不需要.html_safe(当然,除非字符串中的其他内容需要)。

        Ruby 编程语言,第一版说:“在 Ruby 1.9 中,双引号字符串可以包含带有 \u 转义的任意 Unicode 转义字符。\u 最简单的形式是后跟正好四个十六进制数字..."

        【讨论】:

          【解决方案7】:

          我更喜欢将字符本身与除空白字符之外的大多数符号一起使用转义的 HTML 方法。这样我就不必记住所有的 html 代码。至于空白字符我更喜欢使用 CSS,这是一种更简洁的方式。

          %p&= "#{item.price} $%&#*@"
          

          【讨论】:

            猜你喜欢
            • 2014-07-14
            • 1970-01-01
            • 2020-02-04
            • 1970-01-01
            • 2019-11-10
            • 2013-10-21
            • 1970-01-01
            • 2019-10-13
            • 2017-08-15
            相关资源
            最近更新 更多