Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
Enurl(3)	      User Contributed Perl Documentation	      Enurl(3)

NAME - module for URL-encoding strings and hashes

       version 1.07

	use CGI::Enurl;
	%hash =	(name=>'Jenda Krynicky',address=>'Nerudova 1016');
	print "Location: http://$ENV{SERVER_NAME}/cgi-bin/",enurl	\%hash,"\n\n";

       This is a little	module made for	CGI scripting. It encodes the
       parameters to be	passed to a CGI. It does nothing more, so it's much
       smaller and loads more quickly.

       enurl STRING
       enurl ARRAY
       enurl HASH
	 Encodes the parameter.	If the parameter is a single string it encodes
	 it and	returns	the encoded form.

	 If it is an array or a	reference to an	array it encodes all items and
	 returns them joined by	'&'.

	 If it is a hash it encodes the	values and return a querystring	in
	 form "key2=encoded_value1&key2=encoded_value2&...".

	 !!! Please note that a	hash in	a list context returns a list of all
	 keys and values. This means that if you call enurl(%hash) you will
	 NOT get what you may thing you	should.	You HAVE to use	enurl(\%hash)

       enURL STRING
	 Encodes the parameter,	this version doesn't encode '='	and '&'
	 characters, so	you should make	sure they are not present in the data.

	 Notice	the difference :

	  enurl	'a&b=f o o'   =>   'a%26b%3Df+o+o'
	  enURL	'a&b=f o o'   =>   'a&b=f+o+o'

	 You may specify another character to be used as the parameter
	 separator.  Simply set	this variable to the character (or string) you
	 want to use.

	 The default value is '&'

	 This variable contains	the characters that should stay	unencoded.
	 Please	keep in	mind that the string will be interpolated into a
	 regexp	in a [^...] group!

	 Any change of this variable will be ignored after the first call to
	 enurl or enURL. (I'm using /o switch in the regexp.) So if you	want
	 to change the variable	you should do it as soon as posible. You may
	 do that even before you "use" the module!

	 The default value is 'a-zA-Z 0-9_\\-@.='

	use CGI::Enurl;

	print "Location:",
	 enurl('something strange'),"\n\n";


	use CGI::Enurl;

	print "Location:",
	 enurl('something strange','and	other',666),"\n\n";


	use CGI::Enurl;

	print "Location:",
	 enurl({fname => 'Jan',lname =>	'KrynickA1/2',tel => '+420-2-9618 1234'},1),"\n\n";


	use CGI::Enurl;

	print "Location:",
	 enURL('fname=Jan&lname=KrynickA1/2&tel=+420-2-9618 1234&1',"\n\n";

       or using	the tricks of -

	use CGI::Enurl;
	use Interpolation URL => \&enurl;
	print "name=$URL{'Jann Linder, jr'}&address=$URL{'129 kjhlkjd st'}";

       or even

	use CGI::Enurl;
	use Interpolation enurl	=> sub {my %hash=split /$;/o,$_[0];enurl \%hash};
	 # use other name instead of enurl if you like.

	print "$enurl{name=>'Jenda Krynicky',address=>'Nerudova 1016'}\n";

	%hash =	(name=>'Jenda Krynicky',address=>'Nerudova 1016');

	sub var	{
	 if (ref $_[0] eq 'HASH') {
	   join	$;, %{shift()},	@_;
	 } else	{
	   join	$;, @_;

	print "$enurl{var %hash}\n";
		# the "var" is necessary !
	    # without it you will get :	"Odd number of elements	in hash	list at	... line 2."

	print "$enurl{var %hash,age=>22}\n";

	    # you may omit the "var" only if you enter the hash	as a constant directly
	    # into $enurl{...}.

       If you want to be cheeky	you may	use '$?{}' as the interpolator:

	use CGI::Enurl;
	use Interpolation '?' => sub {my %hash=split /$;/o,$_[0]; '?' .	enurl \%hash};

	print "$?{a=>5,b=>7,n=>'Jenda Krynicky'}\n";


	use CGI::Enurl;
	use Interpolation '?' => sub {'?' . enURL $_[0]};

	print "$?{'a=5&b=7&n=Jenda Krynicky'}\n";
	# # or
	# print	qq{$?{"a=5&b=7&n=$name"}\n};

       Please read the docs for	enurl versus enURL so that you understand the

       The enurl_str function is taken from (It's named	'escape'
       there.) Thanks.

       Jan Krynicky <>

       Copyright (c) 1997-2001 Jan Krynicky <>. All rights
       reserved.  This program is free software; you can redistribute it
       and/or modify it	under the same terms as	Perl itself.

       Hey! The	above document had some	coding errors, which are explained

       Around line 94:
	   Non-ASCII character seen before =encoding in	''KrynickA1/2',tel'.
	   Assuming CP1252

perl v5.32.1			  2002-08-08			      Enurl(3)


Want to link to this manual page? Use this URL:

home | help