파이썬에서 HTML을 탈출하는 가장 쉬운 방법은 무엇입니까?
cgi.dll은 하나의 가능한 선택인 것 같습니다.작동이 잘 되나요?더 나은 것으로 여겨지는 것이 있습니까?
html.escape 지금은 정답입니다. 3.2 이전에는 파이썬으로 되어 있었습니다.탈출:
<로.<>로.>&로.&
그것은 모든 HTML에 충분합니다.
편집: Craig가 말하는 것처럼 다른 인코딩을 사용하는 다른 인코딩 문서에 포함하기 위해 이스케이프하고 싶은 비아스키 문자가 있으면 다음을 사용하십시오.
data.encode('ascii', 'xmlcharrefreplace')
디코딩하는 것을 잊지 마십시오.data로.unicode먼저, 인코딩된 인코딩을 사용합니다.
하지만 제 경험에 따르면, 그런 인코딩은 단지 당신이 일한다면 쓸모가 없습니다.unicode처음부터 줄곧문서 헤더에 지정된 인코딩으로 끝 부분에서 인코딩하기만 하면 됩니다(utf-8최대 호환성을 위해).
예:
>>> cgi.escape(u'<a>bá</a>').encode('ascii', 'xmlcharrefreplace')
'<a>bá</a>
또한 주목할 만한 가치가 있습니다(감사합니다 Greg)는 추가 매개 변수입니다.cgi.escape시간이 걸립니다. 설정된 상태에서.True,cgi.escape큰따옴표 문자도 이스케이프합니다("XML/HTML 속성에 결과 값을 사용할 수 있습니다.
편집: cgi.escape는 Python 3.2에서 기본값이 True인 것을 제외하고는 동일한 기능을 제공하지 않습니다.
Python 3.2에서는 HTML 마크업에서 예약된 문자를 이스케이프하는 데 사용되는 새로운 모듈이 도입되었습니다.
그것은 하나의 기능을 가지고 있습니다.escape():
>>> import html
>>> html.escape('x > 2 && x < 7 single quote: \' double quote: "')
'x > 2 && x < 7 single quote: ' double quote: "'
URL에서 HTML을 이스케이프하려면 다음을 수행합니다.
이것은 OP가 원했던 것이 아닐 수도 있지만(질문은 이스케이프가 어떤 컨텍스트에서 사용되어야 하는지 명확하게 나타내지 않음) Python의 네이티브 라이브러리 urllib는 URL에 안전하게 포함되어야 하는 HTML 엔티티를 이스케이프할 수 있는 방법을 가지고 있습니다.
다음은 예입니다.
#!/usr/bin/python
from urllib import quote
x = '+<>^&'
print quote(x) # prints '%2B%3C%3E%5E%26'
훌륭한 마크업 세이프 패키지도 있습니다.
>>> from markupsafe import Markup, escape
>>> escape("<script>alert(document.cookie);</script>")
Markup(u'<script>alert(document.cookie);</script>')
그markupsafe패키지는 잘 설계되었으며, 아마도 가장 다재다능하고 파이썬적인 탈출 방법인 IMHO는 다음과 같은 이유가 있습니다.
- 반환(
Markup)은 유니코드(즉, 유니코드)에서 파생된 클래스입니다.isinstance(escape('str'), unicode) == True - 유니코드 입력을 적절하게 처리합니다.
- Python(2.6, 2.7, 3.3 및 pypy)에서 작동합니다.
- 그것은 객체의 사용자 정의 방법을 존중합니다. (즉, 객체를 가진 객체)
__html__속성) 및 템플릿 오버로드(__html_format__).
cgi.escape HTML 태그와 문자 엔티티를 탈출하는 제한된 의미에서 HTML을 탈출하는 것이 좋습니다.
그러나 인코딩 문제도 고려해야 할 수 있습니다. 인용하려는 HTML에 특정 인코딩에 ASCII가 아닌 문자가 포함되어 있는 경우 인용할 때 해당 문자를 올바르게 나타내도록 주의해야 합니다.아마도 당신은 그것들을 엔티티로 변환할 수 있을 것입니다.그렇지 않으면 "소스" HTML과 내장된 페이지 간에 올바른 인코딩 변환이 수행되어 ASCII가 아닌 문자가 손상되지 않도록 해야 합니다.
순수 파이썬 라이브러리는 텍스트를 HTML 텍스트로 안전하게 이스케이프할 수 없습니다.
text.replace('&', '&').replace('>', '>').replace('<', '<'
).replace('\'',''').replace('"','"').encode('ascii', 'xmlcharrefreplace')
cgi.escape
은 이버은향습다니었되상을 향상시킵니다.cgi.escape또한 공백과 새 줄도 보존합니다.를 반환합니다.unicode현을 매다
def escape_html(text):
"""escape strings for display in HTML"""
return cgi.escape(text, quote=True).\
replace(u'\n', u'<br />').\
replace(u'\t', u' ').\
replace(u' ', u' ')
예를들면
>>> escape_html('<foo>\nfoo\t"bar"')
u'<foo><br />foo "bar"'
가장 쉬운 방법은 아니지만, 여전히 간단합니다.cgi.escape 모듈과의 주요 차이점 - 이미 가지고 있다면 여전히 제대로 작동합니다.&당신의 텍스트에.이에 대한 코멘트에서 알 수 있듯이:
cgi.vmdk 버전
def escape(s, quote=None):
'''Replace special characters "&", "<" and ">" to HTML-safe sequences.
If the optional flag quote is true, the quotation mark character (")
is also translated.'''
s = s.replace("&", "&") # Must be done first!
s = s.replace("<", "<")
s = s.replace(">", ">")
if quote:
s = s.replace('"', """)
return s
정규식 버전
QUOTE_PATTERN = r"""([&<>"'])(?!(amp|lt|gt|quot|#39);)"""
def escape(word):
"""
Replaces special characters <>&"' to HTML-safe sequences.
With attention to already escaped characters.
"""
replace_with = {
'<': '>',
'>': '<',
'&': '&',
'"': '"', # should be escaped in attributes
"'": ''' # should be escaped in attributes
}
quote_pattern = re.compile(QUOTE_PATTERN)
return re.sub(quote_pattern, lambda x: replace_with[x.group(0)], word)
Python 2.7의 레거시 코드의 경우 BeautifulSoup4를 통해 이를 수행할 수 있습니다.
>>> bs4.dammit import EntitySubstitution
>>> esub = EntitySubstitution()
>>> esub.substitute_html("r&d")
'r&d'
언급URL : https://stackoverflow.com/questions/1061697/whats-the-easiest-way-to-escape-html-in-python
'programing' 카테고리의 다른 글
| 다른 행을 기준으로 행 필터링 (0) | 2023.07.13 |
|---|---|
| VS 코드 작업 공간에서 기호로 이동 - 외부 파일 제외 (0) | 2023.07.13 |
| Windows MongoDB - 나침반이 설치되었지만 시스템에서 나침반을 찾을 수 없습니다. (0) | 2023.07.13 |
| 데이터베이스 업그레이드 - 좋은 방법인가요, 나쁜 방법인가? (0) | 2023.07.13 |
| C#에서 이중을 가장 잘 나타내는 SQL 서버 데이터 유형은 무엇입니까? (0) | 2023.07.13 |