I do not think web2py is escaping twice ever. The problem as to do with the 
input expected by pyfpdf. Can you please open a ticket with your solution 
and I will test it asap?

On Saturday, 11 October 2014 04:42:54 UTC-5, Leonel Câmara wrote:
>
> Ok, I have tested this and I have to say sorry for dismissing it as an 
> encoding problem, the bug is definitely there but it's weirder than it 
> looks.
>
> I made the test with:
>
> controller:
> def test():
>     response.view = 'generic.pdf'
>     return {}
>
> view test.html:
> {{=TABLE(TR(TD("Row's %d" % 1, _width='30%'), TD("Something", 
> _align="center", _width='30%'),TD("%d" % 1, _width='40%')))}}
>
>
> And the problem was there, it had also converted the apostrophe to 
> 's. This is web2py helpers doing it btw. 
>
> If you change test.html to this:
>
> <table>
>     <tr>
>         <td width="30%">Row's 1</td>
>         <td width="30%" align="center">Something</td>
>         <td width="40%">1</td>
>     </tr>
> </table>
>
> Then the problem isn't there. This shows the problem is caused by the 
> escaping being done by web2py helpers. It needs to be unescaped before 
> going to the pdf.
>
>
> While trying to find the problem I found yet another problem, things are 
> being escaped without logic because this was what fpdf's HTMLMixin was 
> getting
>
> <table><tr><td width="30%">Row&amp;#x27;s 1</td><td align="center" 
> width="30%">Something</td><td width="40%">1</td></tr>
> </table>
>
> Did anyone notice the &amp;? the &#x27; was escaped again to &amp;#x27; 
> WTF? This seems like a bug with web2py's helpers as they shouldn't escape 
> things that are already escaped.
>
> Ignoring that bug there's a simple fix to be made in 
> gluon/contrib/fpdf/html.py make HTMLMixin escape the hell out of whatever 
> it gets.
>
> class HTMLMixin(object):
>     def write_html(self, text, image_map=None):
>         "Parse HTML and convert it to PDF"
>         h2p = HTML2FPDF(self, image_map)
>         unescaped = h2p.unescape(text)
>         while(unescaped != text):
>             text = unescaped
>             unescaped = h2p.unescape(text)        
>         h2p.feed(text)
>
>
> This finally solved the problem for me.
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to