Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^2: UTF8 URI Escaping

by Eliya (Vicar)
on Apr 12, 2012 at 03:31 UTC ( #964688=note: print w/ replies, xml ) Need Help??


in reply to Re: UTF8 URI Escaping
in thread UTF8 URI Escaping

...would have saved you all that lost time and plenty more in the future.

Don't overestimate what some modules do :)

URI::Escape::uri_unescape() does exactly the same substitution the OP posted, i.e. it also has exactly the same issues.

For one, it doesn't decode the UTF-8 encoded string into a single Unicode character. Rather, it just returns the two octets \xc2 \xa3 (which the OP seems to have some problem with...).  In other words, your sample would only work with a UTF-8 capable terminal, which is rendering the glyph '£' when it receives the two bytes c2 a3.

$ perl -MURI::Escape -le 'print uri_unescape("%C2%A3")' | od -tx1 0000000 c2 a3 0a 0000003

And, as Devel::Peek::Dump shows, the returned string isn't decoded (a Perl Unicode string):

$ perl -MURI::Escape -MDevel::Peek -e 'Dump uri_unescape("%C2%A3")' SV = PVMG(0x1762450) at 0x16ceff0 REFCNT = 1 FLAGS = (TEMP,POK,pPOK) IV = 0 NV = 0 PV = 0x16e5c90 "\302\243"\0 CUR = 2 LEN = 8

This is exactly the same result the OP had achieved with his original code.


Comment on Re^2: UTF8 URI Escaping
Select or Download Code
Re^3: UTF8 URI Escaping
by Your Mother (Chancellor) on Apr 12, 2012 at 03:59 UTC

    Yes, yes. Quite right. Too glossy there, though if the output layer was right, it would have been fine, and I would also have -utf8 flag in the CGI, with proper encodings on the layers and the HTTP headers, or decoding manually the input, or Encoding::Unicode in the Catalyst plugin list, or… The real point being rolling your own can bite seasoned devs, it *will* bite neophytes and create maintenance nightmares for, well, me because I seem to inherit an endless stream of code written in this style.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://964688]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (9)
As of 2015-07-02 00:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (25 votes), past polls