"Un-Webify plus signs" ?

Attila

Grünschnabel
Hallo Leutz,

Ich programmiere ja so ziemlich alles, aber kein Perl. Jetzt ist mir in einem meiner Foren ein merkwürdiges (?) Verhalten aufgefallen, dass bei Eingabe in ein Formular das "+" Zeichen rausgeschnitten wird.

Im massgeblichen Quellcode finde ich nun diesen Part, der offenbar dafür verantwortlich ist:
# Un-Webify plus signs and %-encoding
$input{$key} =~ tr/+/ /;
Hier werden wohl nach meinem Verständnis Pluszeichen zu Leerzeichen umgewandelt. Nun finde ich das in etlichen Perl Skripten. Welchen Hintergrund gibt es dafür? Kann man diese (An-)Zuweisung problemlos wegeditieren? Oder gibt es einen anderen Weg, das Anzeigen des Pluszeichens dennoch zu realisieren?

Ratlos
Attila
 
Der Hintergrund ist das Leerzeichen in UrlParametern z.B. als Pluszeichen kodiert übergeben werden, da Leerzeichen nicht in Urlangaben übergeben werden können. Daher muss man sie im Script zurück nach Leerzeichen umwandeln. Wie man nun Pluszeichen selbst anzeigen kann weiß ich jez net. Aber ich gug mal nach.
 
Das hört sich zumindest schon mal gut an ...

... ich habe Hoffnung :)

Dank Dir schon mal für die Mühe!
btw: rein logisch, würde es nicht reichen, abzufragen, ob es sich um eine URL handelt? Nur so als Idee?
 
Passt - Problem solved!

Es funktioniert mit einer kleinen If Abfrage:


if ($input{$key} =~ /http/) {

$input{$key} =~ tr/+/ /;}

Bin doch gar nicht so schlecht ... ;-)) Trotzdem Danke für den für mich ganz wichtigen Hinweis zu dem Hintergrund!
 
Bitte für die Info. Aber du kannst dann jetzt trotzdem noch keine '+' zeichen übertragen oder? Ich hab übrigens nicht gefunden wie n Pluszeichen entsprechend kodiert werden soll. Vielleicht mit '\+'? Wer so Perltypisch. Aber hat nix wirklich mit Perl zu tun diese Kodierung...
 
Doch!

Es ! Pluszeichen werden angezeigt, es sei denn, es handelt sich um eine http Adresse. Dann wird wie bisher konvertiert.

Frag mich jetzt nicht warum ;-)
 
nimm doch einfach das cgi-modul:

use CGI;
# Formulardaten in hash einlesen
$q = new CGI;
%in;
$in{$_} = $q->param($_) foreach $q->param;


greetz mo
 
?tzzzz

Würd ich ja gerne, aber ich bin des Perls nicht mächtig und wüßte nicht, wo ich da ansetzten sollte. Es handelt sich um die kostenlose Forensoftware von Parsimony. :D
 
Hilfe?

Hi prince,

Das Angebot nehm ich gerne an. Vielleicht findest Du eine intelligentere Lösung zum Problem. Was ich da konstruiert habe funktioniert zwar, aber ich bin mir nicht über die eventuellen Nebeneffekte im klaren.

Ich schick Dir mal ne Mail.
 

Neue Beiträge

Zurück