Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11684[/thread]

ersetzung von sonderzeichen mit perl

Leser: 1


<< >> 5 Einträge, 1 Seite
Gast Gast
 2008-04-22 15:34
#108716 #108716
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.
renee
 2008-04-22 15:43
#108717 #108717
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
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 CPAN: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...

Code (perl): (dl )
1
2
3
4
5
6
7
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;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2008-04-22 15:52
#108719 #108719
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
renee
 2008-04-22 16:01
#108721 #108721
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
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:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my $test = 'hällö';

my %map = (
  chr(228) => 'ae',
  chr(246) => 'oe',
  chr(223) => 'ss',
);

$test =~ s!([äöß])!$map{$1}!g;
print $test;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2008-04-22 16:09
#108725 #108725
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
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 =)
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
<< >> 5 Einträge, 1 Seite



View all threads created 2008-04-22 15:34.