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

Alle Zeichen durch definierte andere ersetzen



<< >> 3 Einträge, 1 Seite
oll
 2008-08-08 22:04
#113257 #113257
User since
2008-08-08
1 Artikel
BenutzerIn
[default_avatar]
Moin,

ich bin ganz frisch bei Perl, hab vorher nur mit PHP/mysql gearbeitet. Jetzt arbeite ich aber mit dem CMS Imperia, und das benutzt Perl.

Meine Frage ist, wie ich in einen String bestimmte Zeichen durch andere ersetze. Hintergrund ist, dass ich E-Mailadressen durch HTML Entities ersetzen will, damit Spamharvester ein wenig mehr Probleme damit haben.

Die E-Mailadressen sind ja immer unterschiedlich lang und es muss auf das ganze Alphabet und . (Punkt) getestet werden und halt entsprechend ersetzt werden. Die E-Mailadresse werd ich wohl teilen, beim @ am besten, dann muss ich das nicht mit reinnehmen.

Gibt's für's Ersetzen wie ich's will ne Funktion?
pktm
 2008-08-08 22:42
#113259 #113259
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Du kannst es entweder mit regulären Ausdrücken machen (googlen nach regex) oder du nimmst ein Modul, dass dir auch noch die Arbeit abnimmt, für die ganzen Zeichen eigenhändig die Entities zu ersetzen: CPAN:HTML::Entities

Eine einfache Substitution kannst du so machen:
Code: (dl )
1
2
my $string = "abc";
$string =~ s/a/xx/g; ersetze alle a durch zwei x.


Mehr dazu gibts in der perlfunc: http://perldoc.perl.org/perlfaq6.html

Probiers mal aus, wenn du noch Fragen hast, frag hier :)
http://www.intergastro-service.de (mein erstes CMS :) )
cbxk1xg
 2008-09-09 20:59
#114439 #114439
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Ich würde HTML::Entities benutzen.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
use strict;
use warnings;
use HTML::Entities ();
my $mailaddress = "micky.miller\@foo.bar";

# Encoding
HTML::Entities::encode($mailaddress);

# Decoding
HTML::Entities::decode($mailaddress);
<< >> 3 Einträge, 1 Seite



View all threads created 2008-08-08 22:04.