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.

Foi útil?

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:', '')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top