【问题标题】:How to parse links and escape html entities?如何解析链接和转义 html 实体?
【发布时间】:2014-01-04 05:24:16
【问题描述】:

我有一些想要呈现的用户提供的内容。

显然内容应该被转义,rails 默认会这样做。但是我也想解析文本,以便将 url 显示为链接。

有一个 auto_link 助手可以做到这一点。但是,无论我按什么顺序执行此操作,都无法获得所需的结果。

取内容:

content                                             
  => "<img src=\"foo\" />\\r\\n\\r\\nhttp://google.com"

如果这个被转义了,因为url中的斜杠被转义了,auto_link就不起作用了:

Rack::Utils.escape_html(content)                    
  => "&lt;img src=&quot;foo&quot; &#x2F;&gt;\\r\\n\\r\\nhttp:&#x2F;&#x2F;google.com"

如果我首先使用 auto_link,显然链接会被转义。此外, auto_link 会去除不需要的内容而不是转义。如果输入中存在脚本标记,我希望它转义而不是删除。

auto_link(content)                                  
  => "<img src=\"foo\" />\\r\\n\\r\\n<a href=\"http://google.com\">http://google.com</a>"

知道如何获得所需的输出吗?

感谢您的帮助。

【问题讨论】:

  • 如何将内容保存到数据库?在保存内容之前,您是否正在做一些事情来逃避内容?您是否可以选择清理内容并保存为纯 html?
  • 这只是数据库中的一个文本字段。在保存之前不要转义,因为将来可能会使用其他非 html 视图。即使我可以在保存而不是渲染时逃脱,我也必须解决与上述相同的问题。

标签: html ruby-on-rails ruby-on-rails-3 actionview html-escape-characters


【解决方案1】:

您可以使用content.gsub!(/\\./, "") 去除所有转义的空白字符。然后你就可以使用auto_link了。

【讨论】:

  • 这不会留下 http:google.com 吗?不要认为这适用于 auto_link...
  • 结果将是"&lt;img src=\"foo\" /&gt;http://google.com"gsub 正在替换此模式:“\。”空白字符使用反斜杠和字符。您的 URL 将是安全的,因为 ULR 使用正斜杠。
  • 好吧,我看错了。那没有帮助。我想保留空白,并逃避 html/脚本注入
【解决方案2】:

我最终使用的解决方案是放弃 auto_link,让 Rack 转义我的内容服务器端,然后使用 https://github.com/gabrielizaias/urlToLink 在客户端从文本中解析出链接

$('p').urlToLink();

【讨论】:

    【解决方案3】:

    我已经成功了:

    auto_link(h(content))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 2017-09-12
      • 2014-04-11
      • 1970-01-01
      • 2014-10-12
      相关资源
      最近更新 更多