html шестнадцатеричная кодировка электронной почты в pelican не работает

Я создаю веб-сайт в Pelican (новичок) и пытаюсь закодировать свой адрес электронной почты. Мой адрес электронной почты используется на странице контактов, где вы нажимаете на изображение, чтобы инициировать открытие электронного письма (которое уже имеет некоторый контент).

Мой файл 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>

Он работает нормально, но не сохраняет кодировку. В источнике страницы он показывает мой реальный адрес электронной почты. Что мне не хватает? Спасибо.


person Schmiechen    schedule 21.02.2015    source источник


Ответы (2)


Пока пеликан создает html-файлы, он перезаписывает все, даже исходники html. Вот почему ваше электронное письмо переписывается без шестнадцатеричной кодировки.

Вы можете попробовать следующий простой плагин. Просто поместите __init.py__ и hide_links.py в папку hide_links внутри вашего каталога плагинов, а в pelicanconf.py добавьте hide_links в качестве последней записи в значении PLUGINS. Важно поставить этот плагин последним, чтобы избежать перезаписи html-файла pelican после запутывания почтового адреса. Теперь просто напишите свой почтовый адрес в 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 *
person felleb    schedule 26.04.2015

Этот способ кодирования не скроет ваш адрес электронной почты, потому что, когда браузер прочитает письмо, он его расшифрует.

Независимо от того, как вы кодируете свою электронную почту, кто-то найдет способ ее расшифровать и прочитать. Если бы они хотели найти его, они могли бы.

Если вы просто хотите скрыть это от ботов, вы можете использовать функцию .replace() javascript, чтобы переключить некоторые буквы. Однако, если у пользователя отключен javascript, он не сможет использовать форму.

person Austin Collins    schedule 21.02.2015
comment
javascript .replace не вариант - есть другие идеи, чтобы скрыть его от ботов? - person Schmiechen; 21.02.2015
comment
У вас нет рабочего адреса электронной почты, который можно использовать, не скрывая его? Другой способ скрыть электронное письмо — пропинговать php-сервер для получения подробной информации и заблокировать доступ ботов к этому файлу с помощью файла robots.txt. - person Austin Collins; 21.02.2015
comment
Спасибо, я последую этой мысли. - person Schmiechen; 21.02.2015
comment
@Schmiechen Нет проблем, поставьте галочку, если мой ответ решил ваш официальный вопрос. (Что мне не хватает?) - person Austin Collins; 21.02.2015