preg_replace: sonderzeichen entfernen
Da Pinky
- php
hallo,
ich möchte meinen besuchern die möglichkeit geben ihre dateien umzubenennen. wie genau filter ich die sonderzeichen raus, die nicht in einem dateinamen vorkommen dürfen? alle fragwürdigen zeichen sollen rausgeworfen werden, leerzeichen mit einem _ ersetzt werden.
ich habs so (nach wikipedia, "Regular expression") versucht, klappt aber irgendwie nicht:
$filename = preg_replace('[:punct:]', "", $filename);
$filename = preg_replace('[:blank:]',"_",$filename);
$filename = preg_replace('[:space:]', "_",$filename);
vielen dank für eure mühen!
Hallo,
$filename = preg_replace('[:punct:]', "", $filename);
$filename = preg_replace('[:blank:]',"_",$filename);
$filename = preg_replace('[:space:]', "_",$filename);
Die POSIX-Zeichenklassen funktionieren bei den PERL-kompatiblen regulären Ausdrücken nicht.
Siehe: http://de3.php.net/manual/de/reference.pcre.pattern.syntax.php
Alle Leerzeichen bekommst Du bspw. mit \s (statt [:space:]).
Viele Grüße,
Christian
你好 Christian,
$filename = preg_replace('[:punct:]', "", $filename);
$filename = preg_replace('[:blank:]',"_",$filename);
$filename = preg_replace('[:space:]', "_",$filename);Die POSIX-Zeichenklassen funktionieren bei den PERL-kompatiblen
regulären Ausdrücken nicht.
Ich muss dich enttäuschen. Wenn man sie richtig anwendet gibt es sie auch
bei PCRE:
$filename = preg_replace('[[:punct:]]','',$filename);
Das muss man übrigens auch bei POSIX Regexen so machen... die Syntax oben
ist in jedem Fall inkorrekt.
再见,
克里斯蒂安
Hallo 克里斯蒂安,
Ich muss dich enttäuschen. Wenn man sie richtig anwendet gibt es sie auch
bei PCRE:$filename = preg_replace('[[:punct:]]','',$filename);
Oh, wußte ich gar nicht (steht auch glaube ich nicht in der PHP-Doku, stand zumindest nicht da, als ich sie gelesen habe).
Aber bei Deinem Beispiel fehlen trotzdem noch die Delimiter. ;-)
$filename = preg_replace('/[[:punct:]]/','',$filename);
Viele Grüße,
Christian
你好 Christian,
Hallo 克里斯蒂安,
Hehe ;)
Aber bei Deinem Beispiel fehlen trotzdem noch die Delimiter. ;-)
$filename = preg_replace('/[[:punct:]]/','',$filename);
Äh. Ja. Danke ;)
再见,
克里斯蒂安
$filename = preg_replace('[[:punct:]]','',$filename);
Das muss man übrigens auch bei POSIX Regexen so machen... die Syntax oben
ist in jedem Fall inkorrekt.
danke für deine hilfe, ich habs so ausprobiert - klappt aber auch nicht:
Warning: preg_replace() [function.preg-replace]: Compilation failed: POSIX named classes are supported only within a class at offset 0
hab in meinem experimentierdrang mal preg_replace in ereg_replace geändert, dann hats geklappt :)
danke nochmal, problem gelöst.
Hallo,
danke für deine hilfe, ich habs so ausprobiert - klappt aber auch nicht:
Warning: preg_replace() [function.preg-replace]: Compilation failed: POSIX named classes are supported only within a class at offset 0
Das liegt an den fehlenden Delimitern, siehe meine Antwort an Christian.
hab in meinem experimentierdrang mal preg_replace in ereg_replace geändert, dann hats geklappt :)
preg_replace ist ereg_replace aber vorzuziehen, da schneller und binärsicher (und kann mehr, was hier aber irrelevant ist).
Viele Grüße,
Christian