pelican中的html十六进制电子邮件编码不起作用
我正在用鹈鹕(初学者)建立一个网站,我正在尝试对我的电子邮件地址进行编码。“我的电子邮件地址”用于“联系人”页面,在该页面中,您可以单击图像以启动电子邮件的打开(其中已经有一些内容) My contact.rst文件包括: 。。原始::htmlpelican中的html十六进制电子邮件编码不起作用,html,email,pelican,Html,Email,Pelican,我正在用鹈鹕(初学者)建立一个网站,我正在尝试对我的电子邮件地址进行编码。“我的电子邮件地址”用于“联系人”页面,在该页面中,您可以单击图像以启动电子邮件的打开(其中已经有一些内容) My contact.rst文件包括: 。。原始::html <a href="mailto:petsy@petsy-fink.&am
<a href="mailto:petsy@petsy-fink.com?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 *