package Template::Plugin::Decode; use strict; use warnings; use 5.008001; require Template::Plugin::Filter; use base qw(Template::Plugin::Filter); use vars qw($VERSION $DYNAMIC $FILTER_NAME); $VERSION = 0.02; $DYNAMIC = 0; $FILTER_NAME = 'decode'; sub init { my $self = shift; my $args = shift; my $name = $self->{_ARGS}->[0] || $FILTER_NAME; $self->install_filter($name); return $self; } sub filter { my($self, $text) = @_; utf8::decode($text) unless utf8::is_utf8($text); return $text; } 1; __END__ =head1 NAME Template::Plugin::Decode - decoding filter plugin for Template-Toolkit. =head1 SYNOPSIS at first, [% USE Decode %] then you can use the filter 'decode'. this filter encodes string from UTF-8 to Perl's inner unicode format. [% multibyte_str | decode %] =head1 DESCRIPTION Template::Plugin::Decode is a plugin for TT, which allows you to decode output string to unicode(Perl inner format). =head1 NOTE I guess you often see scrambled results, when you use TT2 with templates and embedded parameters including utf-8 multibyte characters. That's because it combines decoded string(Perl inner format) and undecoded one. To prevent it, use this module. This is a one of solutions for this problem. Use utf-8 template files with BOM and decode parameters that are embedded into it, and you'll never seen garbled text. =head1 AUTHOR Lyo Kato Ekato@lost-season.jpE =head1 SEE ALSO L