home changes contents help options

236:HTMLをエスケープする/エスケープをはずす

HTML として意味を持つ文字をエスケープする

Pythonスクリプトの中に現れた文字列をそのままHTMLに出力すると期待通りに表示されないことがあります。 これは、htmlに含めるためにはエスケープしなくてはならない文字があるためです。

HTMLのテキストとしてエスケープしなくてはならない文字は、「<」「>」「&」の3つです。 また、タグの属性部分に現れる文字の場合は、これらの3つに加えて、「"」もエスケープしなくてはなりません。

これらは、

「&」----&amp;

「>」----&gt;

「<」----&lt;

「"」----&quot:

となります。 xml.sax.saxutils モジュールにはこれらの文字をエスケープしてくれる escape, quoteattr 関数が用意されています。 escape 関数は本文用で、 quoteattr はタグの属性部分用です。

>>> from xml.sax.saxutils import *
>>> escape('x<0 & y>1')
'x&lt;0 &amp; y&gt;1'

エスケープする文字を増やすために第 2 引数 entities に変換テーブルを示す辞書を渡すことができます。次のコードは上述の文字に加え「'」を数値実態参照「&#39;」に変換します。

>>> escape('"It\'s me!", he said.', {"'": '&#39;'})
'"It&#39;s me!", he said.'

HTML のエスケープされた文字をアンエスケープする

エスケープされた HTML をアンエスケープするために xml.sax.saxutils モジュールの unescape 関数が用意されています。

>>> unescape('x&lt;0 &amp; y&gt;1')
'x<0 & y>1'

escape, quoteattr 関数同様、変換する文字を増やすことができます。

>>> unescape('"It&#39;s me!", he said.', {'&#39;': "'"})
'"It\'s me!", he said.'