[Catalyst] Re: Catalyst, utf8 in form element type text

Aristotle Pagaltzis pagaltzis at gmx.de
Mon May 5 14:39:47 BST 2008

* Marius Kjeldahl <mariusauto-catalyst at kjeldahl.net> [2008-05-05 00:20]:
> Everything seems to work fine

“Seems” being the operative word.

> with one small exception. Whenever I have a HTML form input
> type=text with an international character and the form
> validation fails, so the default value of the input field
> contains the international character, the rest of the html
> document does no longer display international characters
> correctly.

That is because all of that was not marked as character data to
begin with. When Perl tries to concatenate it with a Unicode
string, it sees byte strings so it decodes them as Latin-1. Then
all the UTF-8 multibyte characters turn into gremlins.

> I'm guessing the browser detects that the document contains
> some element that is not proper utf8, and disables utf8
> altogether before displaying whenever the input field contains
> an international characters.

You’re probably wrong about that guess. What headers do you send?

Do you use `<meta http-equiv="Content-Type">`? (Bad idea, btw.)

> If I remove the international character from the input field
> and resubmit, everything is displayed correctly again. […] The
> input field value is set in the template from the
> $c->req->parameters passed in the stash.

Are you using Catalyst::Plugin::Unicode?

> So my question is what's the best way to handle this?

Did you tell Template Toolkit or whatever template engine you use
that the templates are in UTF-8?

> Can an input value in a form handle a utf8 encoded string at
> all


> and if so how can I convince it my string is utf8, and if I do
> does the browser detect it automagically?

No, the headers must be set correctly.

> Any pointers?

In addition to the above? Check out encoding::warnings.

Aristotle Pagaltzis // <http://plasmasturm.org/>

More information about the Catalyst mailing list