pelican中的html十六进制电子邮件编码不起作用

pelican中的html十六进制电子邮件编码不起作用,html,email,pelican,Html,Email,Pelican,我正在用鹈鹕(初学者)建立一个网站,我正在尝试对我的电子邮件地址进行编码。“我的电子邮件地址”用于“联系人”页面,在该页面中,您可以单击图像以启动电子邮件的打开(其中已经有一些内容) My contact.rst文件包括: 。。原始::html <a href="mailto:&#112;&#101;&#116;&#115;y&#64;p&#101;&#116;&#115;&#121;&#45;fink.&am

我正在用鹈鹕(初学者)建立一个网站,我正在尝试对我的电子邮件地址进行编码。“我的电子邮件地址”用于“联系人”页面,在该页面中,您可以单击图像以启动电子邮件的打开(其中已经有一些内容)

My contact.rst文件包括:

。。原始::html

<a href="mailto:&#112;&#101;&#116;&#115;y&#64;p&#101;&#116;&#115;&#121;&#45;fink.&#99;&#111;&#109;?subject=Inquiry%20about%20a%20photo%20shooting&body=Name%3A%20%0AEmail%3A%20%0ACell%20phone%20number%3A%20%0AType%20of%20shooting%3A%20%0AEvent%20date%3A%0AEvent%20Time%20(from%2Funtil)%3A%20%0APhotographer%20required%20(from%2Funtil)%3A%20%0ALocation%20and%20Country%3A%20%0AReferral%20from%3A%20%0AMessage%3A%0A"><img src="theme/images/nav/contact_image_en_900W.jpg"></a>


它工作正常,但不保留编码。在页面来源中,它显示了我的真实电子邮件地址。我错过了什么?谢谢。

这种编码方式不会隐藏您的电子邮件地址,因为浏览器读取电子邮件时会对其进行解码

无论你如何编码你的电子邮件,都会有一种方法让别人解码并阅读它。如果他们想找到它,他们可以


如果你只是想对机器人隐藏它,你可以使用javascript
.replace()
函数来切换一些字母。但是,如果用户禁用了javascript,他们将无法使用表单。

当pelican创建html文件时,它会重写所有内容,甚至是html源。这就是为什么你的电子邮件是重写没有十六进制编码

您可以尝试以下简单的插件。只需将
\u init.py\u
hide\u links.py
放在插件目录中的文件夹
hide\u links
pelicanconf.py
中添加
hide\u links
作为
插件
值的最后一项。重要的是要把这个插件放在最后,以避免邮件地址混淆后被pelican重写html文件。现在只需将您的邮件地址写入
contact.rst
,而不使用十六进制编码

隐藏链接.py

"""
Hide Links
----------

adds the possibility to obfuscate email addresses with a random mixture of 
ordinal and hexadecimal chars
"""

from pelican import signals
from bs4 import BeautifulSoup
import random
import re

def obfuscate_string(value):
    ''' Obfuscate mail addresses

    see http://www.web2pyslices.com/slice/show/1528/obfuscation-of-text-and-email-addresses
    '''

    result = ''
    for char in value:
        r = random.random()
        # Roughly 20% raw, 40% hex, 40% dec.
        # '@' and '_' are always encoded. 
        if r > 0.8 and char not in "@_":
           result += char
        elif r < 0.4:
            result += '&#%s;' % hex(ord(char))[1:]
        else:
            result += '&#%s;' % str(ord(char))
    return result

def hide_links(htmlDoc, context='localcontext'):

    with open(htmlDoc,'r') as filehandle:
        soup = BeautifulSoup(filehandle.read()) 

    for link in soup.find_all('a', href=re.compile('mailto')):

        link['href'] = obfuscate_string(link['href'])
        link.contents[0].replaceWith(obfuscate_string(link.contents[0]))

        title = link.get('title')
        if title:
            link['title'] = obfuscate_string(title)

    html = soup.decode(formatter=None)
    html = html.encode('utf-8')
    with open(htmlDoc, "wb") as file:
        file.write(html)

def register():

    signals.content_written.connect(hide_links)

javascript.replace不是一个选项-有没有其他方法可以从机器人程序中隐藏它?你没有一个不需要隐藏就可以使用的商业电子邮件地址吗?另一种隐藏电子邮件的方法是ping一个php服务器以获取详细信息,并用robots.txt文件阻止机器人访问该文件。谢谢,我会遵循这个想法。@Schmiechen没问题,如果我的答案解决了您的正式问题,请按勾号。(我错过了什么?)
from .hide_links import *