HTML::Entitesで非ASCII文字を数字文字参照にしない方法

読了まで:約0分


概要: 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 に載ってるし。

#FIXME

アバターアイコン兼ロゴ

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。次に備えて待機中。

今は趣味でプログラミングをして生活しています。