PHP Dateiname verify
alkativo
- php
Hi,
ich schreibe gerade ein Backend. Hierfür habe ich auch die Funktionen addFile und addFolder. Dabei soll halt folgendes passieren. Angenommen man will das File "Al-Kati vö!" nennen. Da soll die Funktion "al_kati_voe" draus machen. Konkret
$specialcharreplace = array("ä" => "ae","ö" => "oe", "ü" => "ue","ß" => "ss");
//Leerzeichen vorne hinten weg
$name = trim($name);
//alle Zeichen klein
$name = strtolower($name);
//Buchstaben ersetzen
foreach ($specialcharreplace as $key => $value) {
$name = str_replace($key,$value,$name);
}
//nur Zahlen und Buchstaben
$name = preg_replace("(\W)","",$name);
preg_replace checke ich aber nicht so ganz. So kommen ja nur Zahlen und Buchstaben dabei raus. Ist doch verständliche oder?
Cucu
Al
Hello,
da kannst Du jeden Fall in der "utf-8-Falle" landen.
Du musst also sehr genau beachten, wie die Einstellungen sind
Die Umwandlung kann dann aber mit einem str_ireplace() stattfinden.
http://de2.php.net/manual/en/function.str-ireplace.php
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
ist ja mein System da ist alles auf UTF8. Auch das Formular. Das verszehe ich nicht was du mir sagen möchtest. Mit geht es erstmal um die richtige generierung des Filenamens. Und wie soll mit ireplace helfen?
Bis dann
Al
Hi!
Und wie soll mit ireplace helfen?
Hättest Du Toms Link benutzt, wüßtest Du, dass die Funktion str_ireplace
heißt und zum Ersetzen von Strings durch andere Strings genutzt wird.
off:PP
(Hallo|Hi(ho)|Nabend) alkativo,
ich schreibe gerade ein Backend. Hierfür habe ich auch die Funktionen addFile und addFolder. Dabei soll halt folgendes passieren. Angenommen man will das File "Al-Kati vö!" nennen. Da soll die Funktion "al_kati_voe" draus machen.
Warum baust du dir sowas selbst? Gibts doch schon fertig von iconv:
$out = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $inp)
$name = preg_replace("(\W)","",$name);
> preg\_replace checke ich aber nicht so ganz. So kommen ja nur Zahlen und Buchstaben dabei raus. Ist doch verständliche oder?
\w passt auf alle Buchstaben oder Ziffern. \W ist die Umkehrung davon, also alle anderen Zeichen. Die ersetzt du durch einen Leerstring (also durch Nichts). Kein Wunder, dass nur Buchstaben und Ziffern übrigbleiben. Für Transliteration wirst du mit einem simplen RegEx nicht weit kommen.
MffG
EisFuX
--
[Nichts ist dem Zuwachs an Wissen förderlicher, als nach einer Antwort korrigiert zu werden.](http://community.de.selfhtml.org/zitatesammlung/zitat119)
Hi,
Angenommen man will das File "Al-Kati vö!" nennen. Da soll die Funktion "al_kati_voe" draus machen.
Warum baust du dir sowas selbst? Gibts doch schon fertig von iconv:
Und dieses ISO-8859-1 enthält keine Umlaute ...?
MfG ChrisB
(Hallo|Hi(ho)|Nabend) ChrisB,
»» $out = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $inp)
Und dieses ISO-8859-1 enthält keine Umlaute ...?
Doch enthält es. Gemeint war natürlich:
$out = iconv("UTF-8", "ASCII//TRANSLIT", $inp)
Aber dessen Output ist auch eher unbrauchbar. Es macht aus:
»Fix, Schwyz!« quäkt Jürgen blöd vom Paß.
das:
Fix, Schwyz!<< qu"akt J"urgen bl"od vom Pass.
Umlaute erkannt und umgewandelt -- leider in ein für Dateinamen ungünstiges Format. :-/
Als weitere Alternative (zum Selberbasteln) wäre da noch die Translit-Extension. Die kann auch Satzzeichen und ähnlichen Kram zu Underscores konvertieren.
Zumindest soll sie das laut "Kurzanleitung" können. Ich hab sie nur kurz getestet, und da hat sie sich aufs Zeichen-Verschlucken beschränkt.
MffG
EisFuX
Hi,
ich schreibe gerade ein Backend. Hierfür habe ich auch die Funktionen addFile und addFolder. Dabei soll halt folgendes passieren. Angenommen man will das File "Al-Kati vö!" nennen. Da soll die Funktion "al_kati_voe" draus machen. Konkret
$specialcharreplace = array("ä" => "ae","ö" => "oe", "ü" => "ue","ß" => "ss");
//Leerzeichen vorne hinten weg
$name = trim($name);//alle Zeichen klein
$name = strtolower($name);//Buchstaben ersetzen
foreach ($specialcharreplace as $key => $value) {
$name = str_replace($key,$value,$name);
}//nur Zahlen und Buchstaben
$name = preg_replace("(\W)","",$name);
>
> preg\_replace checke ich aber nicht so ganz. So kommen ja nur Zahlen und Buchstaben dabei raus. Ist doch verständliche oder?
versuchs mal so
~~~php
$name = preg_replace('/\W+/','_',$name);