Thread: [htmltmpl] Escaping unicode
Brought to you by:
samtregar
From: Tobias N. <tn...@mo...> - 2009-11-13 13:27:01
|
Hi! I'm using HTML::Template to generate RTF-documents which works pretty good with plain ASCII. But since with RTF Unicode characters have to be escaped (like \u0123, Unicode::Escape exists for this), I have to either escape it before I feed it to HTML::Template or I have to convince H::T to escape it on-the-fly. The filter option sounds promising, but it touches the template before the tags are parsed. For the data to be escaped before feeding it to H::T, I'd have to add a lot of code, therefore I'd like to avoid this approach. Is there any way I can tell H::T to escape Unicode data I feed to it with param()? If not, then the next best thing would be to create a patched version of H::T for my purposes with a method like param_escape() or sth like that, right? Best regards! Tobias |
From: Michael P. <mp...@pl...> - 2009-11-13 14:15:24
|
On 11/13/2009 08:26 AM, Tobias Nissen wrote: > For the data to be escaped before feeding it to H::T, I'd have to add > a lot of code, therefore I'd like to avoid this approach. Is there any > way I can tell H::T to escape Unicode data I feed to it with param()? You could create a function if you were using HTML::Template::Expr or you could subclass HTML::Template and change param to first filter the unicode chars for you. Then pass it off to the base class to do the rest. Would be an extremely simple subclass. > If not, then the next best thing would be to create a patched version of > H::T for my purposes with a method like param_escape() or sth like that, > right? No, please don't do that. Don't run with a patched version unless absolutely necessary. Instead go with a subclass. -- Michael Peters Plus Three, LP |
From: Tobias N. <tn...@mo...> - 2009-11-18 07:27:02
Attachments:
signature.asc
|
Thank you both for your answers! Michael Peters wrote: > On 11/13/2009 08:26 AM, Tobias Nissen wrote: >> For the data to be escaped before feeding it to H::T, I'd have to >> add a lot of code, therefore I'd like to avoid this approach. Is >> there any way I can tell H::T to escape Unicode data I feed to it >> with param()? > > You could create a function if you were using HTML::Template::Expr or > you could subclass HTML::Template and change param to first filter > the unicode chars for you. Then pass it off to the base class to do > the rest. Would be an extremely simple subclass. Indeed... package MyHT; use base 'HTML::Template'; sub param { return SUPER::param(escape(@_)) } sub escape { ... escape magic ... } 1; Or something like that. >> If not, then the next best thing would be to create a patched >> version of H::T for my purposes with a method like param_escape() >> or sth like that, right? > > No, please don't do that. Don't run with a patched version unless > absolutely necessary. Instead go with a subclass. You're right, that's the better approach. And at first it seemed like the right approach for my problem, because I didn't want to walk through complex data structures to escape characters. I thought it would be enough to call a simple escaping function[0] for each value (in (key, value)) param() gets passed. But it turned out to be insufficient, since I was already passing data structures consisting of arrays /and/ hashes. Hence I had to walk through the whole shebang... At that moment a wrapper would just have meant more code, so now I'm just calling $ht_params = escape_unicode_for_rtf($ht_params) if $format eq 'rtf'; before passing the parameters to param(). If there were other formats (and not just RTF) where unicode sequences were to escape, then I'd use a wrapper to enhance code readability, I think. [0] i.e. one that takes every argument and escapes unicode sequences in it. This would work for arrays, hashes and scalars. But that's it then. |
From: Dawid J. <djs...@gm...> - 2009-11-14 23:36:12
|
Definitely would second Michael on not running a patched version. There is only 1, yes only 1 circumstance in which you run a patched version. And that in that circumstance you will know it is the right thing to do. Kingdom Houses Management (+44) 0208 281 1572 kin...@gm... / in...@ki... Kingdom Houses, 5 The Rise, Snaresbrook, London E11 1QA www.kingdomhouses.co.uk -------------------------------------------------------------------------------- ----- Original Message ----- From: "Michael Peters" <mp...@pl...> To: "Tobias Nissen" <tn...@mo...> Cc: <htm...@li...> Sent: Friday, November 13, 2009 2:13 PM Subject: Re: [htmltmpl] Escaping unicode > On 11/13/2009 08:26 AM, Tobias Nissen wrote: > >> For the data to be escaped before feeding it to H::T, I'd have to add >> a lot of code, therefore I'd like to avoid this approach. Is there any >> way I can tell H::T to escape Unicode data I feed to it with param()? > > You could create a function if you were using HTML::Template::Expr or > you could subclass HTML::Template and change param to first filter the > unicode chars for you. Then pass it off to the base class to do the > rest. Would be an extremely simple subclass. > >> If not, then the next best thing would be to create a patched version of >> H::T for my purposes with a method like param_escape() or sth like that, >> right? > > No, please don't do that. Don't run with a patched version unless > absolutely necessary. Instead go with a subclass. > > -- > Michael Peters > Plus Three, LP > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Html-template-users mailing list > Htm...@li... > https://lists.sourceforge.net/lists/listinfo/html-template-users |