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

时间:2015-02-21 16:58:19

标签: html email pelican

我正在Pelican(初学者)建立一个网站,我正在尝试编码我的电子邮件地址。我的电子邮件地址用于您点击图片的联系页面,以启动电子邮件的打开(已有一些内容)。

我的contact.rst文件包括:

.. raw :: 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>

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

2 个答案:

答案 0 :(得分:0)

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

无论您如何对电子邮件进行编码,都可以让某人对其进行解码并进行阅读。如果他们想找到它,他们就可以。

如果您只想将其隐藏在僵尸程序中,可以使用javascript .replace()函数切换一些字母。但是,如果用户禁用了javascript,他们将无法使用该表单。

答案 1 :(得分:0)

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

您可以尝试使用以下简单插件。只需将__init.py__hide_links.py放入插件目录中的hide_links文件夹中,然后将pelicanconf.py添加hide_links作为PLUGINS值中的最后一项。将此插件放在最后以避免在邮件地址被混淆后由鹈鹕重写html文件非常重要。现在只需将您的邮件地址写入contact.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 *