【发布时间】:2019-06-21 15:51:09
【问题描述】:
我有一个用户正在输入的字符串。他们可以添加与链接一样多的链接,但我们只希望某些用户能够单击链接。我想要做的是将任何 a 标签替换为其中的文本。如果有一个链接,我已经设法做到了,但是当有多个链接时,我不知道该怎么做。
这是我目前拥有的,并且已经尝试了许多变体来实现这一点:
url_text = text.split("<a").last.split("</a>").first.split('>').last
text.gsub! /<a.+a>/m, url_text
但它只适用于标签的第一个实例。
我收到的字符串如下所示:
text = <div>blah blah blah.<br /><br /></div>\r\n<div><a href=\"http://www.google.com\">Google</a><br />Another link: <br /> <a href=\"http://www.test.com\">Test Link</a><br /><br /></div>"
我想让它说: 等等等等等等。 谷歌 另一个链接: 测试链接
任何帮助将不胜感激。如果您需要更多代码或信息,请告诉我。
【问题讨论】:
-
强制性.... DO NOT PARSE HTML WITH REGEX。 th̘ë͖̉͠p̯͍̭o̚n̐y̡h̸̡̪̯ͨ͊̽̅̾ȩ̸̡̬̩̪̯̾͛ͪ̈ͨ͊̽̅̾͘ȩ̬̩̾͛ͪ̈͘oͮ͏̮̪̝͍m̖͊̒ͪͩͬ̚̚͜ȇ̴̟̟͙̞ͩ͌͝s̨̥̫͎̭ͯ̿̔s̨̥̫͎̭ͯ̿̔s̨̥̫͎̭ͯ̿̔s̨̥̫͎̭ͯ̿̔s̨̥̫͎̭ͯ̿̔s̨̥̫͎̭̖ͯ̿̔͊̒ͪͩͬ̚̚͜ȇ̴̟̟͙̞̖ͩ͌͊̒ͪͩͬ̚̚͜͝ȇ̴̟̟͙̞ͩ͌͝您的代码可能无法适用于所有边缘案例,而且通常是一个非常糟糕的想法 i>让用户输入像这样的任意html - 你把自己敞开到xss攻击。
-
一个更好的主意是使用 HTML 解析器将特定的 HTML 标签显式列入白名单(可能针对不同的用户使用不同的列表)。不是正则表达式。 edgeapi.rubyonrails.org/classes/ActionView/Helpers/… -- 这个方法可能就是你所需要的。
-
@TomLord - 很好,这就是为什么我想问一定有更好的方法。只有超级用户才能进入它,它来自 tinymce,所以他们不会自己添加 html。
-
使用所见即所得的编辑器并不能保护您免受恶意用户的侵害。您仍然可以在表单中提交任意数据。但是,如果您完全信任用户,那么(与大多数事情一样)安全性就不那么重要了。
标签: ruby-on-rails regex ruby string