| Hello,
I found a few bugs concerning utf8 handling in dtl templates and in forms.
Value stored in database are stored with large integer value of characters and those
would end up into the template result and make xmerl complain and bug.
I modified erlydtl_compiler:format to correct this:
diff -r old/lib/erlydtl-0.5.3/src/erlydtl/erlydtl_compiler.erl new/lib/erlydtl-0.5.3/src/erlydtl/erlydtl_compiler.erl
548c548,552
<     auto_escape(format_number_ast(Ast), Context).
---
>     Tmp = format_number_ast(Ast),
>     %% Value is a list of Unicode codepoints.  We need to convert that
>     %% to UTF-8.
>     Tmp2 = erl_syntax:application(erl_syntax:atom(erlydtl_filters), erl_syntax:atom(utf32_to_utf8), [Tmp]),
>     auto_escape(Tmp2, Context).
the "utf32_to_utf8" function I put in erlydtl_filters ; but I'm sure there
must be a more appropriate place for it. It was a quick hack.
diff -r old/lib/erlydtl-0.5.3/src/erlydtl/erlydtl_filters.erl new/lib/erlydtl-0.5.3/src/erlydtl/erlydtl_filters.erl
192a193,199
> utf32_to_utf8(Input) when is_list(Input) ->
>     % Convert utf32 strings into utf8
>     {ok, UTF8} = utf8:to_binary(Input),
>     binary_to_list(UTF8);
> utf32_to_utf8(Input) ->
>     Input.
>
I also found another problem with forms. wpart forms would retrieve the large integer
character and bug.
Here's what I did to fix it:
diff -r old/lib/wparts-1.4/src/wpart_derived.erl new/lib/wparts-1.4/src/wpart_derived.erl
135c135
<     Input = Module:build_html_tag(LName, Params, find(LName, Defaults)),
---
>     Input = Module:build_html_tag(LName, Params, erlydtl_filters:utf32_to_utf8(find(LName, Defaults))),
I hope it'll helps.
Regards.
 |