概要: HTML::Entites hack
Perl で HTML の一般文字参照とか数字文字参照とかを扱うのに HTML::Entities というモジュールがあるんだけど、 これは日本語とかの ASCII 以外をすべて数字文字参照にしてしまうので、その辺りの対処方。
一番手っ取り早いのは、
use strict;
use warnings;
use utf8;
use HTML::Entities;
{
no warnings 'redefine';
*HTML::Entities::num_entity = sub { $_ [[0]] };
}
print encode_entities('<あああ>');
こんな感じにすることなんだけど、これするとencode_entities_numericが動かなくなる。
あとどう見てもバッドノウハウ。
なんで、%HTML::Entities::entity2char、%HTML::Entities::char2entityあたりを使って、
自前でエンコードする関数を書く、というのが多分スマート。
というのを思いついた。なんでとりあえずメモ。
追記
さっき気づいたけど、別にこんなことしなくても、
encode_entitiesの第二引数でなんとかなる。
ざっとこんな感じ。
use strict;
use warnings;
use utf8;
use HTML::Entities;
print encode_entities('<あああ>', '<>&');
ちゃんと POD に載ってるし。