我希望将所有单词前面的#(即#stackoverflow)转换为一个链接,点击后链接到搜索页面,并将该单词作为查询。
我最近尝试了这个并获得了正确的HTML,但由于内容会自动转义,因此显示为:
This is some content <a href="search?q=something">something</a>
我的问题是:除了这些链接之外,有没有办法只将html_safe应用于内容的每个部分?
答案 0 :(得分:1)
如果您的代码是简单的字母数字字符串(即不需要HTML或URL编码),那么您可以执行以下操作:
s = ERB::Util.html_escape(text_to_be_linkified).gsub(/#(\w+)/, '<a href="search?q=\1">\1</a>').html_safe
然后s.html_safe?
将为真,<%= ... %>
将按原样传递结果。如果将其放在视图帮助器中,则ERB::Util.
上不需要html_escape
前缀。如果您确实需要担心URL或HTML编码,那么您可以适当地修改gsub
替换字符串。
例如:
> s = ERB::Util.html_escape('<pancakes & #things').gsub(/#(\w+)/, '<a href="search?q=\1">\1</a>').html_safe
> puts s.html_safe?
true
> puts s
<pancakes & <a href="search?q=things">things</a>