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