HTML::FormFu::Manual::Unicode - Working with unicode
Working with unicode.
For a practical example, see the Catalyst application in the examples/unicode directory in this distribution.
examples/unicode
In this tutorial, we're assuming that all encodings are UTF-8. It's relatively simple to combine different encodings from different sources, but that's beyond the scope of this tutorial.
For simplicity, we're also going to assume that you're using Catalyst for your web-framework, DBIx::Class for your database ORM, TT for your templating system, and YAML format HTML::FormFu configuration files, with YAML::Syck installed. However, the principles we'll cover should translate to whatever technologies you chose to work with.
HTML::FormFu
To make it short and sweet: you must decode all data going into your program, and encode all data coming from your program.
Skip to "CHANGES REQUIRED" if you want to see what you need to do without any other explanation.
Catalyst::Plugin::Unicode will decode all input parameters sent from the browser to your application - see "Catalyst Configuration".
Catalyst::Plugin::Unicode
DBIx::Class::UTF8Columns will decode all input retrieved from the database - see "DBIx::Class Configuration".
DBIx::Class::UTF8Columns
Set TT to decode all template files - see "TT Configuration".
Set HTML::FormFu to decode all template files - see "HTML::FormFu Template Configuration".
If you're using YAML config files, your files will automatically be decoded by load_config_file|HTML::FormFu/load_config_file and load_config_filestem|HTML::FormFu/load_config_filestem, which automatically sets $YAML::Syck::ImplicitUnicode = 1.
YAML
load_config_file|HTML::FormFu/load_config_file
load_config_filestem|HTML::FormFu/load_config_filestem
$YAML::Syck::ImplicitUnicode = 1
If you have Config::General config files, your files will automatically be decoded by load_config_file|HTML::FormFu/load_config_file and load_config_filestem|HTML::FormFu/load_config_filestem, which automatically sets Config::General's -UTF8 setting.
-UTF8
Any perl source files which contain unicode must use the utf8 module.
DBIx::Class::UTF8Columns will encode all data sent to the database - see "DBIx::Class Configuration".
Catalyst::Plugin::Unicode will encode all output sent from your application to the browser - see "Catalyst Configuration".
Add Catalyst::Plugin::Unicode to the list of Catalyst plugins:
use Catalyst qw( ConfigLoader Static::Simple Unicode );
Add DBIx::Class::UTF8Columns to the list of components loaded, for each table that has columns storing unicode:
__PACKAGE__->load_components( qw( UTF8Columns HTML::FormFu PK::Auto Core ) );
Pass each column name that will store unicode to utf8_columns():
utf8_columns()
__PACKAGE__->utf8_columns( qw( lastname firstname ) );
Tell TT to decode all template files, by adding the following to your application config in MyApp.pm
package MyApp; use strict; use parent 'Catalyst'; use Catalyst qw( ConfigLoader ); MyApp->config({ 'View::TT' => { ENCODING => 'UTF-8', }, }); 1;
Make HTML::FormFu tell TT to decode all template files, by adding the following to your myapp.yml Catalyst configuration file:
myapp.yml
package MyApp; use strict; use parent 'Catalyst'; use Catalyst qw( ConfigLoader ); MyApp->config({ 'Controller::HTML::FormFu' => { constructor => { tt_args => { ENCODING => 'UTF-8', }, }, }, }); 1;
These above 2 examples should be combined, like so:
package MyApp; use strict; use parent 'Catalyst'; use Catalyst qw( ConfigLoader ); MyApp->config({ 'Controller::HTML::FormFu' => { constructor => { tt_args => { ENCODING => 'UTF-8', }, }, }, 'View::TT' => { ENCODING => 'UTF-8', }, }); 1;
Carl Franks cfranks@cpan.org
cfranks@cpan.org
This document is free, you can redistribute it and/or modify it under the same terms as Perl itself.
To install HTML::FormFu, copy and paste the appropriate command in to your terminal.
cpanm
cpanm HTML::FormFu
CPAN shell
perl -MCPAN -e shell install HTML::FormFu
For more information on module installation, please visit the detailed CPAN module installation guide.