fce param

Honza Pazdziora adelton na informatics.muni.cz
Středa Srpen 13 19:31:07 MEST 2003


On Wed, Aug 13, 2003 at 06:46:18PM +0200, Zdenek Lukes wrote:
> Mam takovy problem s fci param. Pouzivam ji ve spojeni PHP a GCI, kdy pomici php predavam parametry CGI (perl). Vse funguje jak mam, jenze kdyz chci predat retezec, ktery ma v sobe "+" tak mi ho prevede na znamk mezera.
> 
> Nevite nekdo jak toto vyresit, ci jak to obejit abych mohl predavat parametry i se znamenkem "+"

Neni mi uplne jasne, co kam kdo predava (PHP do Perlu nebo Perl do
PHP), faktem ovsem zustava, ze znak + (plus) je v query casti URI
zkratkou a ekvivalentem pro mezeru. Pokud tedy chcete mit v hodnote
parametru mezeru (a param funkce z CGI.pm vraci "ciste" hodnoty, pote,
co je odescapuje), pouzijte pri zapisu budto + nebo %20. Pokud tam
naopak chcete mit plus, pouzijte %2B.

Priklad:

http://www.site.com/script.pl?mm=jezek+a%20krtek

	V takto odkazovanem skriptu skriptu param("mm") vrati
	hodnotu "jezek a krtek".

http://www.site.com/script.pl?mm=jezek+%2B%20krtek

	V takto odkazovanem skriptu param("mm") vrati hodnotu
	"jezek + krtek".

http://www.site.com/script.pl?mm=jezek+%2B&slon=%20krtek

	V takto odkazovanem skriptu param("mm") vrati hodnotu
	"jezek +" a param("slon") vrati " krtek". Samozrejme v HTML je
	nutne takoveto URI zapsat s escapovanym ampersandem, tedy

	http://www.site.com/script.pl?mm=jezek+%2B&slon=%20krtek

Pokud jde o to, ze mate ty hodnoty (retezce "jezek + krtek", a tak
dale), a chcete zpusob, jak z toho udelat hodnoty, ktere muzete
placnout do URL, tak pouzijte URI::Escape:

	use URI::Escape;
	%parametry = (
		'mm' => 'jezek a krtek',
		'slon' => 'jezek + krtek',
		'zizala a +plusko' => '--=--',
		);
	my $url = 'http://www.site.com/script.pl';
	my $firsttime = 1;
	for (keys %parametry) {
		$url .= ($firsttime ? '?' : '&')
			. uri_escape($_)
			. '='
			. uri_escape($parametry{$_});
		$firsttime = 0;
	}
	# Pokud to $url chcete pouzit primo v HTML, dejte misto '&'
	# retezec '&', nebo provedte
	$url =~ s/&/&/g;
	# Se znaky < a > neni treba si lamat hlavu, protoze ty
	# zpracoval uz uri_escape.

Doufam, ze to pomuze,

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, auth. WWW servers, XML/XSL, ...
		Only self-confident people can be simple.


Další informace o konferenci Perl