読者です 読者をやめる 読者になる 読者になる

或阿呆のブログ

Pythonを好んで使っているプログラマです。Ruby,Perl,PowerShell,VBAなどでもたまに書いています。おバカなことが大好きです。

HTMLエスケープをするために"""トリプルクウォーテーションを使う。

Python

HTMLのDOCTYPEをprintしようと、何も考えずにこう打つと怒られる。

>>> print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">"
  File "<ipython-input-3-dbd02efd2bb9>", line 1
    print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">"
                                    ^
SyntaxError: invalid syntax

理由は単純で、"の開始と終了が不明確だからだ。文字列中にも"が入っているところが原因。

"を文字列として扱いたい場合は、やり方は思いつくところ3つある。

"を""に置き換える

>>> print "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">"
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>

正攻法の一つではあるとは思うんだけど、ひとつひとつエスケープさせるのは面倒くせぇわ・・・。

'で括る

>>> print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

Pythonでは、"と'に機能的な違いがある。詳細な説明を省くと、、、文字列をそのまま出力したい場合は、'を使ったほうが早い。変数なんかを入れたい場合は"のほうが使いやすい。

"""で括る

他の言語で言うところのヒアドキュメントみたいなもの。厳密には機能差はあるけど。文字列を改行込みでそのままの見栄えで出力したい場合には便利。

>>> print """
... <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
... """
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

文字列をいったん変数に格納するのも良いやり方かもしれない。

>>> doctype = """
... <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
... """
>>> print doctype

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">