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

Posted at 2007-07-13T14:05:07+09:00 in Coding

この記事は書かれてから約2年7ヶ月経っています。

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

About Me

name
Naoki Okamura
nick
nyarla
contact
nyarla[ at ]thotep.net
Category
Log
Banners
Powered by
plasxom