문제
Python 웹 응용 프로그램을 프로그래밍하면 사용자가 가벼운 마크 업 언어로 텍스트를 입력 할 수있는 텍스트 영역을 만들고 싶습니다. 텍스트는 HTML 템플릿으로 가져와 페이지에서 볼 수 있습니다. 오늘 저는이 명령을 사용하여 TextArea를 만들므로 사용자가 html (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()])
일부 (안전하고 결국 가벼운) 마크 업만 허용되도록 어떻게 변경할 수 있습니까? 소독제를 포함한 모든 제안은 파이썬과 쉽게 통합되는 한 환영합니다.
해결책
파이썬을 사용하십시오 가격 인하 구현
import markdown
mode = "remove" # or "replace" or "escape"
md = markdown.Markdown(safe_mode=mode)
html = md.convert(text)
매우 유연하고 다양한 확장을 사용하고 직접 등을 만들 수 있습니다.
다른 팁
당신은 사용할 수 있습니다 구조 조정 된 텍스트 . 소독 옵션이 있는지 확실하지 않지만 파이썬에서 잘 지원되며 모든 종류의 형식을 생성합니다.
이 간단한 소독 기능은 화이트리스트를 사용하며 솔루션과 거의 동일합니다. Python-HTML-Sanitizer-Scrubber-Filter, 또한 속성의 사용을 제한 할 수 있습니다 (아마도 누군가가 누군가를 사용하기를 원하지 않기 때문에 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:', '')
제휴하지 않습니다 StackOverflow