2009-11-09 2 views
3

나는 사용자가 입력 할 텍스트 서식을 지정하기 위해 섬유 스타일의 기존 파이썬 라이브러리를 둘러 보았습니다."안전한"python HTML 텍스트 포맷 (ala textile)

만약 내가 그것을 입력했다면, 그냥 섬유 괜찮 았을 것이지만, 입력은 사용자 입력을 받아 표시 할 장고 응용 프로그램을 의미하기 때문에, 여전히 일부 서식을 유지하면서.

내가 본 기존 라이브러리에는 여기에 약간의 허점이 있습니다. 그들은 때로는 그들이해야하는 것처럼 물건을 벗어나지 않을 것이고, 똑바로 HTML을 입력하게하고 목록은 계속 나아 간다.

그래서 사용할 수있는 변환 엔진의 권장 사항은 무엇입니까?

답변

6

, 당신은 안전 인하를 시도 할 수 있습니다.

저장시 HTML을 위생 처리하려면 feedparser의 sanitize (http://www.feedparser.org/)를 사용하여 행운을 빌 렸습니다.

import feedparser 

body = feedparser._sanitizeHTML(body, 'utf8') 
+0

, 지금까지 내 검색에 올라와되지 않았습니다. 나는 그것을 밖으로 시도 할 것이다. 감사. – cwj

+0

이 스레드는 오래되었지만 Django 1.5부터 Python-markdown versions <2.1의 보안 결함으로 인해 Python-markdown required * 버전은 2.1 이상이어야합니다. [추가 정보] (https://docs.djangoproject.com/ko/1.5/ref/contrib/markup/#id1) – tatlar

1

django.contrib.markup 라이브러리를 사용해 보셨습니까? 당신의 settings.py 응용 프로그램에서

{% load markup %} 

{{ foo|markdown:"safe" }} 
당신은 인하가 설치되어 있어야합니다

django.contrib.markup : 당신이 장고를 사용하는 경우

2

당신은 섬유 솔루션을 찾고있는 경우 : 마크 업이 실제로 사용하는 어떤 이유로, django.contrib.markup에 그것을 만든 적이없는 textile_restricted() 함수를 가지고 장고 PyTextile. 이 기능을 사용하여 제한된 섬유를 제공 할 수 있습니다. 어느 다음 코드에 의해 정의 textile_restricted, 또는 사용자 정의 템플릿 태그 textile_restricted을 사용하여 호출 모델에 메소드를 추가하여 :

흥미롭게
from django import template 
from django.conf import settings 
from django.utils.encoding import smart_str, force_unicode 
from django.utils.safestring import mark_safe 

register = template.Library() 

def textile_restricted(value): 
    try: 
     import textile 
    except ImportError: 
     if settings.DEBUG: 
      raise template.TemplateSyntaxError("Error in {% textile %} filter: The Python textile library isn't installed.") 
     return force_unicode(value) 
    else: 
     return mark_safe(force_unicode(textile.textile_restricted(smart_str(value)))) 
textile_restricted.is_safe = True 

register.filter(textile_restricted)