Umschreiben von Umlauten in Dateinamen

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
557
Hallo,

ich habe ein "Image Uploader". Dieser soll Umlaute und Leerzeichen umschreiben.

PHP:
    private function umlautPatcher($value)
    {
        $value = strtolower ($value);

        $search = array(" ", "ä", "Ä", "ö", "Ö", "ü", "Ü", "ß");
        $replace = array("_", "ae", "ae", "oe", "oe", "ue", "ue", "ss");
        $patched = str_replace($search, $replace, $value);

        return $patched;
    }

aus "ÄÄ ÖÖ ÜÜ ä ö ü haßßsoo.jpg" wird dann "aeae_oeoe_ueue_ae_oe_ue_hasssssoo.jpg"

Das funktioniert!

Nun möchte ich aber ein Index aus einem "Import Ordner" erstellen.

PHP:
    public function ftpImporter()
    {
        $arCleaned = array();

        function fileFilter ( $strEntry )
        {
            if ( substr ( $strEntry, -5 ) == '.jpeg' || substr ( $strEntry, -4 ) == '.png' || substr ( $strEntry, -4 ) == '.gif' || substr ( $strEntry, -4 ) == '.jpg' ) {
                return $strEntry;
            }
            return false;
        }
        $arDir = scandir( './upload/import/' );
        $arFiles = array_filter ( $arDir, 'fileFilter' );

        foreach($arFiles as $files) {
            $arCleaned[] = $this->umlautPatcher($files);
        }

        return $arCleaned;
    }

Mein Output ist hier aber:
PHP:
array(3) {
  [0]=>
  string(46) "ää_öö_üü_ä_ö_ü_hasssssoo.jpg"
  [1]=>
  string(18) "firefoxlogo3.5.png"
  [2]=>
  string(16) "ppuf1000x907.gif"
}

Was ich nicht ganz verstehe: es werden unterstriche und das ß ersetzt, aber ä,ö,ü nicht ?
 
war der ausgangsname ää öö üü ä ö ü haßßsoo.jpg ?

€: steht ja oben sry
 
Klingt nach einem Problem mit der Zeichenkodierung. Wenn du einen Ordner einliest, hast du "unter Windows" in der Regel eine Kodierung "CP-1252" oder "ISO-8859-1". Wenn dein Skript in UTF-8 läuft, schlägt die Suche nach den Umlauten einfach fehl.
 
also ich programmiere unter osx, gibt es eine möglichkeit das zu umgehen? bzw es für unix/osx/windows kompatibel zu machen?
 
Evtl. indem du die Zeichenkodierung prüfst.
Aber wozu überhaupt die Mühe? Jeder anständige Browser kann Umlaute (sogar in Domainnamen) verarbeiten, genauso jedes anständige Betriebssystem.
 
ansonsten mittels mb_detect_encoding das Charset ermitteln und in UTF8 (oder was du intern/auf dem server verwendest) umwandeln und dann erst die Umlaute replacen.
 
PHP:
array(3) {
  [0]=>
  string(46) "ÄÄ ÖÖ ÜÜ ä ö ü haßßsoo.jpg"
  [1]=>
  string(18) "FirefoxLogo3.5.png"
  [2]=>
  string(16) "ppuf1000X907.gif"
}

PHP:
array(3) {
  [0]=>
  string(5) "UTF-8"
  [1]=>
  string(5) "ASCII"
  [2]=>
  string(5) "ASCII"
}

In was genau soll ich nun Umwandeln, damit ich die Umlaute ändern kann, ohne dass beim Umwandeln schon Umlaute zerstört werden?
 
Was für ein Charset verwendest du bei deinem Editor?

Bzw. mit welchem Editor programmierst du?
 
und das Script läuft auf einem XAMPP Server ? dem OS X internen oder einen richtigen Webserver?
Welche CHarsets sind da eingestellt?

Den UTF-8 ist schon richtig momentan scheint alles auf dem richtigen/selben Charset codiert zu sein :/
 
Ja ist ein XAMPP Server.

Habe gerade nach einer längeren Google-Session die Lösung gefunden:

PHP:
        $search = array(" ", "ä", "Ä", "ö", "Ö", "ü", "Ü", "ß", "A\314\210", "O\314\210", "U\314\210", "a\314\210", "o\314\210", "u\314\210");
        $replace = array("_", "ae", "ae", "oe", "oe", "ue", "ue", "ss", "ae", "oe", "ue", "ae", "oe", "ue");

Damit klappt es nun :-)
 
Da du alles "tolower" wandelst, werden ÄÖ und Ü nie in deinem String auftauchen, oder?

ABC.jpg kollidiert dann übrigens auch mit der bestehenden abc.jpg...
 

Ähnliche Themen

Zurück
Oben