C::P::Session::State::URI×HTML::Entitiesで文字化け

とりあえずググルと以下のような記事が。

しかし、それもコードが冗長になるので、以下の方法で対応しました。

MyApp.pm

%HTML::Entities::char2entity = (
    '&' => '&' ,  # ampersand
    '>' => '>'  ,  # greater than
    '<' => '&lt;'  ,  # less than
    '"' => '&quot;',  # double quote
);
http://www.craft-works.co.jp/blog/archives/226

まさしく同じ症状だったので上記の対処法をそのまま試したのですがそれでも化けてしまい、しぶしぶHTML::Entitiesのコードを覗いてみたところ

	$$ref =~ s/([^\n\r\t !\#\$%\(-;=?-~])/$char2entity{$1} || num_entity($1)/ge;

とゆーよーな感じの実装になってました。%char2entityが空の場合、結局num_entityが呼ばれるのでこいつもどうにかしないといけないようです。

で調べているとnum_entityを上書きして対応している記事を発見したのですが、この記事も書いてある通り、num_entity上書きしちゃうとencode_entities_numericが正しく動かなくなるのでそれはそれで嫌だなと思いつつもとりあえずこれで対応しました。



でも色々と怖いですねぇ。

やっぱHTML::TokeParser::Simple::Token::Tag::Start::rewrite_tagを上書きする方がいいのかもとか、んん〜〜〜。

どうしようか迷い中。