236:HTMLをエスケープする/エスケープをはずす
HTML として意味を持つ文字をエスケープする
Pythonスクリプトの中に現れた文字列をそのままHTMLに出力すると期待通りに表示されないことがあります。 これは、htmlに含めるためにはエスケープしなくてはならない文字があるためです。
HTMLのテキストとしてエスケープしなくてはならない文字は、「<」「>」「&」の3つです。 また、タグの属性部分に現れる文字の場合は、これらの3つに加えて、「"」もエスケープしなくてはなりません。
これらは、
「&」----& 「>」----> 「<」----< 「"」----":
となります。 xml.sax.saxutils モジュールにはこれらの文字をエスケープしてくれる escape, quoteattr 関数が用意されています。 escape 関数は本文用で、 quoteattr はタグの属性部分用です。
>>> from xml.sax.saxutils import *
>>> escape('x<0 & y>1')
'x<0 & y>1'
エスケープする文字を増やすために第 2 引数 entities に変換テーブルを示す辞書を渡すことができます。次のコードは上述の文字に加え「'」を数値実態参照「'」に変換します。
>>> escape('"It\'s me!", he said.', {"'": '''})
'"It's me!", he said.'
HTML のエスケープされた文字をアンエスケープする
エスケープされた HTML をアンエスケープするために xml.sax.saxutils モジュールの unescape 関数が用意されています。
>>> unescape('x<0 & y>1')
'x<0 & y>1'
escape, quoteattr 関数同様、変換する文字を増やすことができます。
>>> unescape('"It's me!", he said.', {''': "'"})
'"It\'s me!", he said.'