Schrift
[thread]12633[/thread]

Perl Get-Methoden Problem

Leser: 3


<< >> 8 Einträge, 1 Seite
Gast Gast
 2008-10-13 22:13
#115475 #115475
Also, kommen ich ma direkt zum Problem.

Ich habe Probleme in einer Get Methode das ";" Zeichen zu empfangen.

Testscript [eben als Beispiel hingeklatscht :P] :


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl 
use CGI;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
$query = CGI->new(); 
$option = $query->param("option");

print $option;


so, wenn ich nu zb so aufrufe :

test.pl?option=Hallo wie gehts ?

Dann wird "Hallo wie gehts?" ausgegeben.

Wenn ich nun aber :

test.pl?option=Hallo; wie gehts ?

aufrufe,wird leider NUR "Hallo" ausgegeben :(

Wie kann ich das lösen ?

MFG
Gast Gast
 2008-10-13 23:04
#115478 #115478
Gast+2008-10-13 20:13:22--
Wie kann ich das lösen ?

Nachlesen wie man GET mit CGI's nutzen sollte...

Also, du weißt sicherlich, dass bei einem "GET" bestimmte Zeichen entwertet werden müssen.
Nun ist neben "=", "&", "?", "%" usw. auch ";" eines dieser Zeichen.
Richtig ist es alle kritischen Zeichen in der Form %HEX dar zu stellen wobei "HEX" der zweistellige hexadezimale Wert des Zeichens ist. Übrigens das Leerzeichen sollte auch als %20 dargestellt werden.

So sollte man das ";" besser als "%3B" übertragen.
Das Modul "CGI" macht im allgemeinen die Rückwandlung von alleine.

Übrigens habe ich dafür gerade eine Suchmaschine bemüht, was du sicherlich auch hättest tun können.
pq
 2008-10-13 23:04
#115479 #115479
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
grundsätzlich sollten zeichen wie ;, &, ? und = im querystring immer kodiert sein. das semikolon
ist genau wie & ein parametertrennzeichen für CGI.pm.
generell kodiere *alle* parameter und werte mit CPAN:URI::Escape.
Code (perl): (dl )
1
2
use URI::Escape qw/ uri_escape /;
my $option = uri_escape("Hallo; wie geht's?");
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Gast Gast
 2008-10-13 23:52
#115480 #115480
das Problem ist bei mir leider, das es schon als Plain von einer anderen Seite kommt.
Kann dort leider nichts machen.
Kann man den keinen trick anwenden, zb. das man alle Zeichen einzeln per get bekommt, und bei sonem speziellen zeichen das jeweilige ersetzt?

Es muss doch ne möglichkeit geben :(

MFG
nepos
 2008-10-14 10:26
#115487 #115487
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Dann sag der anderen Seite, dass sie gefälligst HTTP lernen sollen!
pq
 2008-10-14 11:51
#115489 #115489
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
nepos+2008-10-14 08:26:40--
Dann sag der anderen Seite, dass sie gefälligst HTTP lernen sollen!

das hat nix mit HTTP an sich zu tun. das semikolon als trenner zu verwenden ist eine
empfehlung (eine sehr sinnvolle) vom W3C. wie man parameter kodiert, ist jedem
selbst überlassen. aber einem standard zu folgen ist natürlich das beste.

@gast: du kannst CGI.pm glaube ich irgendwo sagen, das semikolon nicht als trenner zu benutzen.
auch wenn ich das nur empfehlen würde, wenns unbedingt sein muss.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Struppi
 2008-10-14 11:59
#115491 #115491
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Normalerweise macht der Browser das. Woher kommt der der Aufruf mit den Parameter, bzw. wie wird dieser erzeugt?
Gast Gast
 2008-10-14 15:10
#115503 #115503
Aus der pod von CGI.pm:
Quote
Pragmas
...
...
-newstyle_urls

Separate the name=value pairs in CGI parameter query strings with semicolons rather than ampersands. For example:
?name=fred;age=24;favorite_color=3

Semicolon-delimited query strings are always accepted, but will not be emitted by self_url() and query_string() unless the -newstyle_urls pragma is specified.

This became the default in version 2.64.
-oldstyle_urls

Separate the name=value pairs in CGI parameter query strings with ampersands rather than semicolons. This is no longer the default.

Wenn du also das alte Verhalten mit & als Trenner willst:
Code: (dl )
use CGI qw(-oldstyle_urls);



Du musst halt wissen wie die Daten versandt werden, ob mit & oder mit ; als Trenner!
<< >> 8 Einträge, 1 Seite



View all threads created 2008-10-13 22:13.