http://qs321.pair.com?node_id=1168768


in reply to Re^8: perl dancer route template hashref pass complex json file to server issue (escape/filter)
in thread perl dancer route template hashref pass complex json file to server issue

You have it backward. You don't need to disable some template filter. You need to create and then enable an appropriate template filter.

Your templated javascript contains lines like:

var test='<%passtoserver%>';

If the value provided for 'passtoserver' was "Don't do this", then the javascript generated by your template would be:

var test='Don't do this';

That is a syntax error. So you need to change your template to contain lines more like:

var test='<% passtoserver | js_str %>';

or, perhaps even better:

var test=<% passtoserver | js_str %>;

where the "| js_str" tells the template to properly escape any characters that need to be escaped in order to be included verbatim inside of a javascript string literal (and, in the second case, also adds the enclosing quote marks).

And, no, Template::Toolkit doesn't come with a pre-built js_str filter so you'll have to create that as well.

Your problem case is due to the \ character not being escaped for similar reasons. So your template produces javascript code like:

var test='­[{"name":"­test","pro­blem":"her­e is the problem \" com +ma "}]';

And, in javascript, '\"' is the same value as '"'.

- tye