logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

URI::Encode - Simple percent Encoding/Decoding

Acknowledgements

       Gisle Aas for URI::Escape

       David Nicol for Tie::UrlEncoder

Author

       Mithun Ayachit "mithun@cpan.org"

Bugs And Limitations

       Please report any bugs or feature requests at <https://github.com/mithun/perl-uri-encode/issues>

Character Classes

ReservedCharacters
       The following characters are considered as reserved (RFC 3986 <http://tools.ietf.org/html/rfc3986>). They
       will be encoded only if requested.

            ! * ' ( ) ; : @ & = + $ , / ? # [ ]

   UnreservedCharacters
       The following characters are considered as Unreserved. They will not be encoded

           a-z
           A-Z
           0-9
           - _ . ~

Dependencies

       Encode

Description

       This modules provides simple URI (Percent) encoding/decoding

       The main purpose of this module (at least for me) was to provide an easy method to encode strings (mainly
       URLs) into a format which can be pasted into a plain text emails, and that those links are 'click-able'
       by the person reading that email. This can be accomplished by NOT encoding the reserved characters.

       This module can also be useful when using HTTP::Tiny to ensure the URLs are properly escaped.

       Thismoduledoesnotencodereservedcharactersbydefault. If you are looking for speed and want to
       encode reserved characters, use URI::Escape::XS

       See this script <https://github.com/mithun/perl-uri-encode/raw/master/.author/benchmark.pl> for a
       comparison on encoding results and performance.

Exported Functions

       The following functions are exported upon request. This provides a non-OOP interface

       "uri_encode($url, \%options)"
       "uri_decode($url)"

Methods

new()
       Creates a new object, no arguments are required

           my $encoder = URI::Encode->new(\%options);

       The following options can be passed to the constructor

       encode_reserved
               my $encoder = URI::Encode->new({encode_reserved => 0});

           If true, "Reserved Characters" are also encoded. Defaults to false.

       double_encode
               my $encoder = URI::Encode->new({double_encode => 1});

           If false, characters that are already percent-encoded will not be encoded again. Defaults to true.

               my $encoder = URI::Encode->new({double_encode => 0});
               print $encoder->encode('http://perl.com/foo%20bar'); # prints http://perl.com/foo%20bar

   "encode($url,\%options)"
       This  method  encodes  the  URL  provided. The $url provided is first converted into UTF-8 before percent
       encoding. Options set in the constructor,  or  defaults,  can  be  overridden  by  passing  them  as  the
       (optional) second argument. Options passed must be a hashref.

           $uri->encode("http://perl.com/foo bar");
           $uri->encode( "http://perl.com/foo bar", { encode_reserved => 1 } );

   "decode($url)"
       This  method  decodes a 'percent' encoded URL. If you had encoded the URL using this module (or any other
       method), chances are that the URL was converted to UTF-8 before 'percent' encoding. Be sure to check  the
       format and convert back if required.

           $uri->decode("http%3A%2F%2Fperl.com%2Ffoo%20bar");

Name

       URI::Encode - Simple percent Encoding/Decoding

See Also

       RFC 3986 <http://tools.ietf.org/html/rfc3986>

       URI::Escape

       URI::Escape::XS

       URI::Escape::JavaScript

       Tie::UrlEncoder

Synopsis

           # OOP Interface
           use URI::Encode;
           my $uri     = URI::Encode->new( { encode_reserved => 0 } );
           my $encoded = $uri->encode($data);
           my $decoded = $uri->decode($encoded);

           # Functional
           use URI::Encode qw(uri_encode uri_decode);
           my $encoded = uri_encode($data);
           my $decoded = uri_decode($encoded);

See Also