什么是从用户输入数据中过滤链接并创建然后在 html 中使用的锚链接的一种安全有效的方法。就像在写一个问题时,你复制粘贴一个链接,它会自动成为一个锚链接。
问问题
368 次
1 回答
1
使用Gruber 的正则表达式来查找 URI。
import re
text = "foo http://www.stackoverflow.com bar"
uri_re = re.compile(r"""(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|"""
r"""www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?"""
r""":[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))"""
r"""*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|"""
r"""[^\s`!()\[\]{};:'".,<>?«»“”‘’]))""")
print uri_re.sub(r"""<a href="\g<0>">\g<0></a>""", text)
结果:
foo <a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a> bar
现在,Gruber 正则表达式实际上将匹配部分 URI,例如www.stackoverflow.com
(这缺少http://
方案),当您将其粘贴到锚标记中时,这将不起作用。您可以编写一个函数来检查它并在必要时添加它,然后使用它来进行替换:
text = "foo www.stackoverflow.com bar"
def link(match):
uri = match.group()
if ":" not in uri[:7]:
uri = "http://" + uri
return r"""<a href="{0}">{0}</a>""".format(uri)
print uri_re.sub(link, text)
于 2012-09-09T00:25:03.047 回答