Python:将电子邮件地址转换为 HTML 链接

Posted

技术标签:

【中文标题】Python:将电子邮件地址转换为 HTML 链接【英文标题】:Python: Convert email address to HTML link 【发布时间】:2011-08-11 06:59:27 【问题描述】:

我正在寻找一个独立的 python 函数,它将接收一个字符串并返回一个字符串,其中电子邮件地址转换为链接。

例子:

>>>s = 'blah blah blah a@at.com blah blah blah'
>>>link(s)
'blah blah blah <a href="mailto:a@at.com">a@at.com</a> blah blah blah'

【问题讨论】:

到目前为止你得到/尝试了什么? @Santa:我尝试了labs.kortina.net/2009/08/14/auto-link-plain-text-urls-in-python 的代码,但没有成功。 【参考方案1】:

这样的?

import re
import xml.sax.saxutils

def anchor_from_email_address_match(match):
    address = match.group(0)
    return "<a href=%s>%s</a>" % (
        xml.sax.saxutils.quoteattr("mailto:" + address),
        xml.sax.saxutils.escape(address))

def replace_email_addresses_with_anchors(text):
    return re.sub("\w+@(?:\w|\.)+", anchor_from_email_address_match, text)

print replace_email_addresses_with_anchors(
    "An address: bob@example.com, and another: joe@example.com")

【讨论】:

您误读了:xml 模块仅用于 html 引用。正则表达式用于查找电子邮件地址。我搞砸了我的字符串格式 - 已修复。 哦哦。是的,我看错了。无论如何都运作良好。然后为 HTML 引用 +1:D 这不会捕获 yahoo-inc.com 等域中的“-”字符。您可以通过修改 replace_email_addresses_with_anchors 添加这些:return re.sub("\w+@(?:\w|\.|\-)+", anchor_from_email_address_match, text) 不会在我的工作中工作,因为每个人都有 first.surname@company.com 形式的电子邮件地址,所以我建议将 re 修改为 "(?:\w|\.|\- )+@(?:\w|\.|\-)+"【参考方案2】:
>>> def convert_emails(s):
...     words =  [ word if '@' not in word else '<a href="mailto:0">0</a>'.format(word) for word in s.split(" ") ]
...     return " ".join(words)
... 
>>> s = 'blah blah blah a@at.com blah blah blah'
>>> convert_emails(s)
'blah blah blah <a href="mailto:a@at.com">a@at.com</a> blah blah blah'
>>> 

不是超级健壮,但适用于非常基本的情况。

【讨论】:

请注意,这里的 DTing 不会打扰 HTML 引用。您应该使用 HTML 引用,除非您控制输入并且知道其中不可能包含具有特殊含义的字符。原因可以搜索“XSS”或“代码注入”,但this famous cartoon 说得更好。 +1 因为它很简单。对于我的用例,这很好,我只是从需求文档转换文本,而不是来自潜在的恶意用户。【参考方案3】:
def link(s):
    return '<a href="mailto:0">0</a>'.format(s)

【讨论】:

这假设您已经匹配并传递了电子邮件地址。

以上是关于Python:将电子邮件地址转换为 HTML 链接的主要内容,如果未能解决你的问题,请参考以下文章

将html转换成canvas

Python将IP转换为八进制地址

C# 中的 HTML 到文本电子邮件转换器

将 Gmail 转换为 PDF:HTML 中的嵌入图像

如何在电子邮件正文中放置 HTML 链接?

创建指向 Paypal 的链接,将电子邮件地址设置为静态