Python對HTML轉義字元進行反轉義

pythontab發表於2018-01-24

什麼是轉義字元

在 HTML 中 <、>、& 等字元有特殊含義(<,> 用於標籤中,& 用於轉義),他們不能在 HTML 程式碼中直接使用,如果要在網頁中顯示這些符號,就需要使用 HTML 的轉義字串(Escape Sequence),例如 < 的轉義字元是 <,瀏覽器渲染 HTML 頁面時,會自動把轉移字串換成真實字元。

轉義字元(Escape Sequence)由三部分組成:第一部分是一個 & 符號,第二部分是實體(Entity)名字,第三部分是一個分號。 比如,要顯示小於號(<),就可以寫< 。

顯示字元    說明  轉義字元

<   小於  <

空格   

<   小於  <

>   大於  >

&   &符號 &

"   雙引號 "

©   版權  ©

®   已註冊商標   ®

Python 轉義字串反轉義

用 Python 來處理轉義字串有多種方式,而且 py2 和 py3 中處理方式不一樣,在 python2 中,反轉義的模組是 HTMLParser。

# Python2
import HTMLParser
>>> HTMLParser().unescape('param=p1&amp;param=p2')
'param=p1&param=p2'

Python3 HTMLParser 模組遷移到了 html.parser

# Python3
>>> from html.parser import HTMLParser
>>> HTMLParser().unescape('param=p1&amp;param=p2')
'param=p1&param=p2'

到 python3.4 以後的版本,在 html 模組新增了 unescape 方法。

# Python3.4
>>> import html
>>> html.unescape('param=p1&amp;param=p2')
'param=p1&param=p2'

推薦最後一種寫法,因為 HTMLParser.unescape 方法在 Python3.4 就已經被廢棄掉不推薦使用了,意味著之後的版本會被徹底移除。

另外,xml的sax模組也有支援反轉義的函式

>>> from xml.sax.saxutils import unescape
>>> unescape('param=p1&amp;param=p2')
'param=p1&param=p2'


相關文章