Re: IRI support in URI and URI::Escape modules

[email protected] (Dan Kogai)
Newsgroups perl.unicode
Message-ID <[email protected]>
On Jan 31, 2005, at 18:19, Martin Duerst wrote:
> I started with some very simple (I thought) tests, but got
> completely confused very quickly. Here is the short program
> that I was using:
>
> >>>> test.pl
> use utf8;
> use URI;
> use URI::Escape;
>
> print (uri_escape("\xFD")
> [snip]
>
> With this, on perl, v5.6.1 built for MSWin32-x86-multi-thread
> (with 1 registered patch, see perl -V for more detail), I get
>
> >>>>
> %FD
> %C3%BD
>
> [snip]
> However, on perl, v5.8.4 built for i386-linux-thread-multi,
> I get:
>
> >>>>
> %FD
> [snip]
> Nothing seems to work anymore, although (or because?) 5.8
> has better Unicode support.

The (easiest|new canonical) way to go is to use uri_escape_utf8() 
instead of uri_escape().  Note that as of version 3.28 
uri_escape_utf8() is NOT AUTOMATICALLY loaded.

% perl -MURI::Escape -le 'print uri_escape("\xFD")'
%FD
% perl -MURI::Escape=uri_escape_utf8 -le 'print uri_escape_utf8("\xFD")'
%C3%BD

perldoc URI::Escape
>        uri_escape_utf8( $string )
>        uri_escape_utf8( $string, $unsafe )
>            Works like uri_escape(), but will encode chars as UTF-8 
> before
>            escaping them.  This makes this function able do deal with 
> charac-
>            ters with code above 255 in $string.  Note that chars in 
> the 128 ..
>            255 range will be escaped differently by this function 
> compared to
>            what uri_escape() would.  For chars in the 0 .. 127 range 
> there is
>            no difference.
>
>            The call:
>
>                $uri = uri_escape_utf8($string);
>
>            will be the same as:
>
>                use Encode qw(encode);
>                $uri = uri_escape(encode("UTF-8", $string));
>
>            but will even work for perl-5.6 for chars in the 128 .. 255 
> range.

Dan the Encode Maintainer
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.