linguagem de marcação leve para Python
Pergunta
A programação de um aplicativo web Python, eu quero criar uma área de texto onde os usuários podem inserir texto em uma linguagem de marcação leve. O texto será importado para um modelo de html e visto na página. Hoje eu usar este comando para criar o textarea, que permite aos usuários inserir qualquer texto (HTML):
my_text = cgidata.getvalue('my_text', 'default_text')
ftable.AddRow([Label(_('Enter your text')),
TextArea('my_text', my_text, rows=8, cols=60).Format()])
Como posso mudar isso para que apenas algumas (seguro, eventualmente, leve) marcação é permitido? Todas as sugestões incluindo desinfetantes são bem-vindos, desde que se integra facilmente com Python.
Solução
Use o python remarcação implementação
import markdown
mode = "remove" # or "replace" or "escape"
md = markdown.Markdown(safe_mode=mode)
html = md.convert(text)
É muito flexível, você pode usar várias extensões, criar o seu próprio etc.
Outras dicas
Você pode usar reestruturado texto. Eu não tenho certeza se ele tem uma opção de desinfecção, mas está bem apoiado por Python, e ele gera todos os tipos de formatos.
Esta função higienização simples usa uma lista branca e é mais ou menos o mesmo que a solução de python-html -sanitizer-purificador filtro , mas também permite limitar o uso de atributos (desde que você provavelmente não quer alguém para uso, entre outros, o atributo style
):
from BeautifulSoup import BeautifulSoup
def sanitize_html(value):
valid_tags = 'p i b strong a pre br'.split()
valid_attrs = 'href src'.split()
soup = BeautifulSoup(value)
for tag in soup.findAll(True):
if tag.name not in valid_tags:
tag.hidden = True
tag.attrs = [(attr, val) for attr, val in tag.attrs if attr in valid_attrs]
return soup.renderContents().decode('utf8').replace('javascript:', '')