我有一個<img src=__string__>
但串可能含有」,我應該怎麼辦,以逃避它在Python中退出html?
?例如:
__string__ = test".jpg
<img src="test".jpg">
不起作用
我有一個<img src=__string__>
但串可能含有」,我應該怎麼辦,以逃避它在Python中退出html?
?例如:
__string__ = test".jpg
<img src="test".jpg">
不起作用
如果你的價值被轉義可能包含報價,最好的辦法是使用quoteattr
方法:http://docs.python.org/library/xml.sax.utils.html#module-xml.sax.saxutils
這是在cgi.escape()方法的文檔下面引用。
+1,quoteattr是**完全**是正確的函數用於此(和在線Python文檔也很清楚這一點!)。 – 2010-06-23 00:36:07
很酷。但值得注意的是,如果你的字符串包含單引號和雙引號,你將會得到一個帶有'"'的URL,這個URL不可能解析到你所定位的資源。 – tcarobruce 2010-06-23 01:00:05
此功能不足。我能夠以這種方式注入HTML。雖然'django.utils.html.escape'工作。 – 2rs2ts 2013-11-15 21:24:03
逃脫XML的最好方法。或python中的HTML可能帶有三重引號。請注意,您也可以使用回車符。
"""<foo bar="1" baz="2" bat="3">
<ack/>
</foo>
"""
我不認爲這回答了這個問題。他想知道如何正確地避免引號_inside_'__string__',因爲他正在使用quotes _around_'__string__'。 – 2010-06-22 20:48:50
沒有回答這個問題。 – 2017-10-20 03:50:05
如果您使用的URL(此處爲img
src)可能包含引號,則應使用URL引用。
對於Python,使用urllib.quote方法的URL字符串傳遞給您的模板之前:
img_url = 'test".jpg'
__string__ = urllib.quote(img_url)
import cgi
s = cgi.escape('test".jpg', True)
http://docs.python.org/library/cgi.html#cgi.escape
注意,True
標誌告訴它逃脫雙引號。如果您還需要轉義單引號(如果您是使用單引號括住html屬性的罕見個人之一),請閱讀該文檔鏈接中關於xml.sax.saxutils.quoteattr()的註釋。後者則這兩種報價,雖然它是慢三倍:
>>> timeit.Timer("escape('asdf\"asef', True)", "from cgi import escape").timeit()
1.2772219181060791
>>> timeit.Timer("quoteattr('asdf\"asef')", "from xml.sax.saxutils import quoteattr").timeit()
3.9785079956054688
失敗cgi.escape不會轉義單引號。由於這個原因,使用它來進行HTML轉義是很危險的,因爲變量的屬性可能是單引號的。如果該屬性是單引號,則可以輕鬆找到跨站點腳本漏洞。 – 2010-06-24 02:41:17
我在回答中明確提到了單引號問題。 – 2010-06-24 03:41:41
在Python 3.2中引入了一個新的html
模塊,該模塊用於從HTML標記中轉義保留字符。
它有一個功能html.escape(s, quote=True)
。 如果可選標誌報價爲真,則還會翻譯字符(")
和(')
。
用法:
>>> import html
>>> html.escape('x > 2 && x < 7')
'x > 2 && x < 7'
你的回答聽起來好像'html'不適用於Python 2,但它是。 – 2017-09-26 09:54:43
這個問題http://stackoverflow.com/questions/275174/how-do-i-perform-html-decoding-encoding-using-python-django有一些有用的答案。 – hwiechers 2010-06-22 20:56:00