2014-02-21 1 views
0

나는 표백제를 사용하여 사용자 입력을 살핍니다. 그러나 저는 Markdown을 사용합니다. 즉, blockquote> 기호가 & gt로 이스케이프되지 않고 통과해야한다는 의미입니다. 그래서 렌더링을 위해 misaka에 그것을 전달할 수 있습니다.표백제가 도망 치는 것을 방지하는 방법> (blockquote) 태그를 Markdown에 사용했습니다.

문서는 기본적으로 html 마크 업을 이스케이프 처리하지만,> 기호에 대해서는이를 해제하는 방법을 설명하지 않습니다. 나는 여전히 실제 HTML 태그를 벗어나고 싶다. 마크 다운을 사용할 수있는 기능을 maintaing하면서 입력을 살균하기위한

http://bleach.readthedocs.org/en/latest/clean.html

다른 아이디어를 감상 할 수있다.

답변

0

모든 태그를 제거해야하지만>를 그대로 두십시오.

  1. 스트립 모든 태그, 단계 1의 출력
  2. HTML 디코드 출력을 받고, 데이터는 단계 2

간단한 방법 미사 것을 합격 (

output.replace '& gt;') '

기타 전문

import HTMLParser 
h = HTMLParser.HTMLParser() 
s = h.unescape(sanitized user input) 
+0

감사합니다. 간단한 방법은 빠른 솔루션으로 잘 작동하지만 html 태그의 끝을 포함하여 모든> 기호와 일치합니다. 새로운 라인 이후에 발생하는 것과 일치하도록하는 것이 가능합니까? 나는 대체 할 수 없었다 ('\ n >', '>') – aris

2

표백제는 Markdown sanitizer가 아닌 HTML 살균제입니다. 설명 된대로 here, 먼저 Markdown을 통해 사용자 입력을 실행 한 다음 Bleach를 통해 사용자 입력을 실행해야합니다. 이와 같이 :

sanitized_html = bleach.clean(markdown.markdown(some_text)) 

자세한 내용은 이전에 참조한 comment을 참조하십시오.

+0

대부분의 사람들 [여기] (http://stackoverflow.com/questions/1266650/should-i-sanitize-markdown)은 데이터베이스에 저장하기 전에 마크 다운을 살균하십시오. 그 스레드에서 OP와 마찬가지로, 나는 원래 markdown 및 생성 된 HTML 모두에 대한 데이터베이스 필드가 있습니다. – aris

+0

@aris 그 주석을 읽는 방법이 아닙니다. 실제로, 그들은 당신이 "웹 클라이언트에게 보내기 전에"위생해야한다고 말합니다. DB에 저장하기 전에 위생적으로해야한다고 말하는 사람은 없습니다 (OP의 질문 이었지만). 어느 쪽이든, 표백제는 Markdown 소독제가 아니므로 작업을위한 잘못된 도구입니다. – Waylan

관련 문제