Schrift
[thread]6119[/thread]

Parameter zum übergeben aufbereiten



<< >> 10 Einträge, 1 Seite
[HR]Doomrunner
 2004-03-05 17:40
#80585 #80585
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe einen String, den ich übergeben will. Da können aber auch allerhand Sonderzeichen drin sein, wie z.B. das "%" Zeichen.

Wisst ihr wie das geht, ohne, dass ich jedes Sonderzeichen einzeln ersetze?

thx,
Doomrunner
pq
 2004-03-05 17:53
#80586 #80586
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wie willst du die zeichen denn ersetzen?
$string =~ tr/%//d; # entfernen
$string =~ tr/%/ /; # mit leerzeichen ersetzen
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
Maluku
 2004-03-05 18:39
#80587 #80587
User since
2003-10-02
27 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wohin willst du den String den übergeben.
Normalerweise muss man da nichts ersetzen.
Willst du etwas vor ihm schützen nimmst du
http://www.perldoc.com/perl5.8.0/pod/func/quotemeta.html

willst du ihn irgendwie verschicken, ohne Sonderzeichen nimmst du pack und baust ihn um.
Code (perl): ()
1
2
3
4
5
&#36_='';
s%%`^.*`s;.*;uhtnmo;;a>lha~a>inu~a>fmk~a>rou~a>duM~a>btl~s;&&&&&&;!d1!l2!b3!i4!f5!r6q(?);e;Z`
`}a>&&&`sub# "1#{#"_=shift#;s^"2^"3#^;``;~`return #"_#}``^!&&`"1(#""2)#\.`Z%;
s~Z~print~g;s/#/\\/g;s/`(.)(.+?)`(.+?)`/s&#36{1}&#36{2}&#36{1}&#36{3}&#36{1}g\;/g;s;&;(.);g;y^"^&#36^;
print;
[HR]Doomrunner
 2004-03-05 19:08
#80588 #80588
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Also gut. Dann mache ich es nochmal ausführlicher - sorry:

Ich habe ein Script, dass eine SQL-Abfrage macht. Dieser String könnte dann in etwa wie folgt aussehen:

Code (perl): (dl )
$string = qq { WHERE strasse LIKE '%45%' }


Jetzt möchte ich von da aus ein anderes Script aufrufen können. Diesem soll dann u.a. dieser String übergeben werden. Dafür habe ich nen Link in die Page eingebaut. Dieser sieht dann wie folgt aus:

Code (perl): (dl )
<a_href="http://localhost/cgi-bin/eos/unternehmensdb.pl?filter=WHERE%20strasse%20LIKE%20'%45%'">LINK</a>


PS: Habe das <a href> mit Unterstrich geschrieben, damit es nicht als Link erkannt wird :p

Die 45 ist ja eigentlich eine Zahl. Und %45% bedeutet ja such mir alles wo eine 45 drin vorkommt. Wenn ich das aber so übergebe interpretiert der Browser das %45 als Sonderzeichen.

Deshalb muss ich die Sonderzeichen doch vorher irgendwie umwandeln, oder nicht?

Hoffe, dass ihr jetzt besser nachvollziehen könnt, worum es mir geht. :rock:\n\n

<!--EDIT|
Doomrunner|1078506621-->
[E|B]
 2004-03-05 19:17
#80589 #80589
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
1. Wieso übergibst du einen kompletten SQL Befehl über die URL?
2. Wenn %45% vom Browser umgewandelt wird nimm doch ein Zeichen, das er nicht umwandelt oder eine Zeichenkombination (z.B. "f7rjdz"), welches du aber im Script wieder durch dein "%" ersetzen kannst.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
[HR]Doomrunner
 2004-03-05 20:10
#80590 #80590
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Ich mache das, da ich im nächsten Script die ganzen dinge wieder brauche. Klar könnte ich das zwar alles wieder neu einlesen und zusammensetzen, doch das wäre doch unnötig, wenn ich den kompletten String übergebe.

In ziemlich alten Scripten habe ich die Möglichkeit gefunden einen String, der in Get übergeben wurde anzupassen:

Code (perl): (dl )
$string =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;


Ich brauche genau das Gegenstück davon :)
[E|B]
 2004-03-05 20:14
#80591 #80591
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Etwa so:

Code: (dl )
print unpack("H*", "Test");
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
pq
 2004-03-06 14:18
#80592 #80592
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[HR
Doomrunner,05.03.2004, 18:08]
Die 45 ist ja eigentlich eine Zahl. Und %45% bedeutet ja such mir alles wo eine 45 drin vorkommt. Wenn ich das aber so übergebe interpretiert der Browser das %45 als Sonderzeichen.

Deshalb muss ich die Sonderzeichen doch vorher irgendwie umwandeln, oder nicht?

ja:
use URI::Escape;
my $escaped = uri_escape ($unescaped);
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
[HR]Doomrunner
 2004-03-06 15:12
#80593 #80593
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Perfekt.

Danke an euch alle. Das URI::Escape war genau, was ich brauchte.

Special Thanx dabei natürlich an pq :)
Maluku
 2004-03-09 11:58
#80594 #80594
User since
2003-10-02
27 Artikel
BenutzerIn
[Homepage] [default_avatar]
Check mal die Sicherheit deines Skriptes...
Ein SQL-befehl vom Benutzer einzulesen ist äußerst unsicher...
Stell dir mal vor jemand gibt dir folgenden Link...:
Code: (dl )
unternehmensdb.pl?filter=WHERE%201%3BDelete%20form%20data%20where %201

Dann steht in deiner Anfrage sowas wie :
Code: (dl )
select * form Data where 1;Delete from data where 1;

Und das löscht dir alle deine Daten.
Auf soetwas musst du dann auch aufpassen
Code (perl): ()
1
2
3
4
5
&#36_='';
s%%`^.*`s;.*;uhtnmo;;a>lha~a>inu~a>fmk~a>rou~a>duM~a>btl~s;&&&&&&;!d1!l2!b3!i4!f5!r6q(?);e;Z`
`}a>&&&`sub# "1#{#"_=shift#;s^"2^"3#^;``;~`return #"_#}``^!&&`"1(#""2)#\.`Z%;
s~Z~print~g;s/#/\\/g;s/`(.)(.+?)`(.+?)`/s&#36{1}&#36{2}&#36{1}&#36{3}&#36{1}g\;/g;s;&;(.);g;y^"^&#36^;
print;
<< >> 10 Einträge, 1 Seite



View all threads created 2004-03-05 17:40.