hi @all,
in perl habe ich leider keine großen erfahrungen, darum frag ich einfach mal.
ich habe einen file-upload wo eingeloggte user dateien hochladen können, diese dateinamen werden dann auch in der mysql datenbank abgelegt.
im adminbereich kann man sich die dateien dann herunterladen, was auch alles gut funktioniert, nur eben wenn einer eine datei mit sonderzeichen hochläd, dann logischer weiße nicht mehr.
ich weiß nun nicht wie das mit perl gemacht wird
my $query = new CGI;
my $file_name = $query->param("id").$query->param("auftrag").$query->param("filename");
$file_name =~ s/.*[\/\\](.*)/$1/;
hier müßten nun noch die sonderzeichen ersetzt werden vorzugsweiße:
ä mit ae, ö mit oe, ßmit ss ... usw.
User since
2003-08-04
14371
Artikel
ModeratorIn
Beachte, dass bei manchen Browsern der komplette Pfad auf dem lokalen Rechner mitgeliefert wird. Ich nehme mal an, dass "filename" der Name eines Datei-Felds im Formular ist. Du solltest also den Dateinamen mit
File::Basename raussuchen...
Dann würde ich eher mit einer "Whitelist" statt mit einer "Blacklist" arbeiten und alles außer alphanumerischen Zeichen plus "." und "-" durch "_" ersetzen...
use File::Basename;
my $query = CGI->new();
my $basename = basename( $query->param('filename') );
my $file_name = $query->param("id").$query->param("auftrag").$basename;
$file_name =~ s![^\w.-]!_!g;
danke, aber ganz so einfach ist es nicht.
der neue dateiname setzt sich dann aus:
my $file_name = $query->param("id").$query->param("auftrag").$query->param("filename");
zusammen. wobei die id und der auftrag eine zahl ist die auch schon mit _ getrennt sind. das brauche ich für die spätere verarbeitung wieder.
also z.b.:
2_22_dateiname.rar
am besten für mich wäre also eine ersezung der sonderzeichen oder gibt es noch eine alternative?
gruß mathi
User since
2003-08-04
14371
Artikel
ModeratorIn
Gast+2008-04-22 13:52:35--zusammen. wobei die id und der auftrag eine zahl ist die auch schon mit _ getrennt sind. das brauche ich für die spätere verarbeitung wieder.
gruß mathi
Und wo siehst Du ein Problem?
Ersetzungen kannst Du so machen:
my $test = 'hällö';
my %map = (
chr(228) => 'ae',
chr(246) => 'oe',
chr(223) => 'ss',
);
$test =~ s!([äöß])!$map{$1}!g;
print $test;
User since
2003-08-04
12208
Artikel
Admin1
Gast+2008-04-22 13:34:32--hier müßten nun noch die sonderzeichen ersetzt werden vorzugsweiße:
dürfen es auch vorzugsschwarze sein?
SCNR =)