Home > tips > C::P::Session::State::URI で HTML::Entities に日本語をエスケープさせない方法

C::P::Session::State::URI で HTML::Entities に日本語をエスケープさせない方法

Catalyst - Session管理とHTMLエンティティコード(数値文字実体参照) でも言及されているように、Catalyst::Plugin::Session::State::URI を使っていると、

<img alt="日本語" />

などが、エスケープされてしまい、表示がおかしくなったりします。

これは、HTML::TokeParser::Simple::Token::Tag::Start が悪さをしているのですが、 HTML::TokeParse::Simple::Token::Tag::Start が呼んでいる HTML::Entities::encode_entities() の第二引数を設定できれば、この問題は回避できるのですが、HTML::TokeParser::Simple::Token::Tag::Start::rewrite_tag() を redefine しないとそれはできません。

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

MyApp.pm

%HTML::Entities::char2entity = (
    '&' => '&amp;' ,  # ampersand
    '>' => '&gt;'  ,  # greater than
    '<' => '&lt;'  ,  # less than
    '"' => '&quot;',  # double quote
);

他にも、HTML::Entitesで非ASCII文字を数字文字参照にしない方法 のように、HTML::Entities::num_entity() を redifine するという方法もあります。

tips ,

  1. コメントはまだありません。
  1. No trackbacks yet.