綾小路龍之介の素人思考

[perl] HTMLタグのエスケープや文字参照、実態参照のデコードにはHTML::Entities

>や<や&の文字参照化(エスケープ、エンコード)を自分で書くより、&HTML::Entities::encode_entities。&gt;や&lt;や&amp;の復元(デコード)を自分で書くより、&HTML::Entities::decode_entities。これがベストプラクティス。

htmlタグをエスケープしたい場合は以下。エンコードする場合はエンコードしたい文字参照の参照先を書く。デフォルトではASCII以上のビットを持つ文字はすべて文字参照化されるので、UTF8で書かれた日本語はすべて数値文字参照になってしまう。

$ perl -MHTML::Entities -Mutf8 -le 'print encode_entities("<p>日本語html</p>");'
&lt;p&gt;&#x65E5;&#x672C;&#x8A9E;html&lt;/p&gt;
&lt;p&gt;日本語html&lt;/p&gt;
$ perl -MHTML::Entities -Mutf8 -le 'print encode_entities("<p>日本語html</p>", "<>&");'
Wide character in print at -e line 1.
&lt;p&gt;日本語html&lt;/p&gt;

エスケープされて文字参照化されたhtmlタグを復元したい場合は以下。

$ perl -MHTML::Entities -Mutf8 -le 'print decode_entities("&lt;p&gt;&#x65E5;&#x672C;&#x8A9E;html&lt;/p&gt;");'
Wide character in print at -e line 1.
<p>日本語html</p>
$ perl -MHTML::Entities -Mutf8 -le 'print decode_entities("&lt;p&gt;日本語html&lt;/p&gt;");'
Wide character in print at -e line 1.
<p>日本語html</p>

リファレンス

  1. 文字参照 - Wikipedia
  2. html 文字参照 - Google 検索
  3. HTML::Entities - HTMLエンティティを持つ文字列のエンコード、デコード
  4. HTML::Entities perl - Google 検索
  5. HTML::Entities - search.cpan.org
  6. PerlのHTML::EntitiesでHTML特殊文字をデコードする - 山歩きプログラマー
  7. 404 Blog Not Found:perl - 文字参照を(en|de)codeする
  8. 駱駝の背中に乗って行こう : 【メモ】HTML エスケープについて
  9. The CPAN Search Site - search.cpan.org

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-07-29T09:03:45+09:00
  2. Modified: 2009-07-29T09:03:45+09:00
  3. Generated: 2017-10-25T23:09:16+09:00