alkativo: PHP Dateiname verify

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

  1. Hello,

    da kannst Du jeden Fall in der "utf-8-Falle" landen.

    Du musst also sehr genau beachten, wie die Einstellungen sind

    • mit welcher Codierung speichert Dein Editor?
    • Wie überträgt Dein FTP-Programm Dateien vom Client zum Server?
    • Welche Header sendet Dein HTTP-Server an den Client?
    • ...

    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

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. 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

      1. 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

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  2. (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)
    
    1. 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:

      $out = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $inp)

      Und dieses ISO-8859-1 enthält keine Umlaute ...?

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.
      1. (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

  3. 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);