1

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

我的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>

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

4

2 回答 2

1

虽然 pelican 创建 html 文件,但它会重写所有内容,甚至是 html 源代码。这就是您的电子邮件在没有十六进制编码的情况下被重写的原因。

您可以尝试以下简单的插件。只需将__init.py__and放在插件目录内hide_links.py的文件夹中,然后将其添加为值中的最后一个条目。重要的是把这个插件放在最后,以避免邮件地址被混淆后 pelican 重写 html 文件。现在只需将您的邮件地址写入没有十六进制编码。hide_linkspelicanconf.pyhide_linksPLUGINScontact.rst

hide_links.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)

__init.py__

from .hide_links import *
于 2015-04-26T23:43:02.980 回答
0

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

无论您如何编码您的电子邮件,总会有人对其进行解码和阅读。如果他们想找到它,他们可以。

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

于 2015-02-21T17:01:55.713 回答