# Web-valide Dateinamen aus Tags erzeugen

**URL:** https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215
**Category:** Allgemein
**Created:** [November 17, 2013, 4:31pm UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215 "2013-11-17T16:31:04Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![beg](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/b/6f9a4e/32.png) [@beg](https://community.mp3tag.de/u/beg)
#### Post date: [November 17, 2013, 4:31pm UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215/1 "2013-11-17T16:31:04Z")

</div>

Hallo,

Gibt es eine fertige Umwandlungsmethode um aus Tags web-sichere Dateinamen zu erzeugen?

Also ich muss Audiodateien anhand der in den Tags gespeicherten Information in einer Art und Weise umwandeln, sodass einerseits die Info aus den Tags verwendet, andererseits diese aber in einer Art umgewandelt werden, sodass der fertige Dateiname web-konform ist.

D.h. also, dass Sonderzeichen in normale Zeichen umgewandelt werden. z.B. aus í, ó müsste I, O werden, entsprechend alle anderen Sonderzeichen wie /()%° etc. behandelt und Leerzeichen durch andere Zeichen ersetzt werden, etc.

lg,  
Bernhard

---

<div class="post-metadata">

### Author: ![LyricsLover](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/l/c6cbf5/32.png) [@LyricsLover](https://community.mp3tag.de/u/LyricsLover)
#### Post date: [November 17, 2013, 4:40pm UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215/2 "2013-11-17T16:40:57Z")

</div>

Du meinst sowas wie [URLEncode](http://de.wikipedia.org/wiki/URL-Encoding)?

Es gibt in Mp3tag den Befehl

> [@](#):
>
> Ungültige Zeichen aus Dateinamen und -pfaden entfernen
> 
> Befehl: $validate(filename, to)
> 
> Beispiel: $validate(%artist% - %album% - %track% - %title%,-)  
> Dieses Beispiel ersetzt alle für Dateinamen ungültigen Zeichen (/?\*"\<\>|:slight\_smile: in der übergebenen Zeichenkette durch Bindestriche.

Der wandelt aber meines Wissens keine Sonderzeichen um, sondern sorgt nur dafür, dass man Dateinamen bekommt, die in einem (Windows-)Filesystem akzeptiert werden. Also ohne Fragezeichen, Sterne, Grösser-Als-Zeichen etc.

---

<div class="post-metadata">

### Author: ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)
#### Post date: [November 17, 2013, 5:08pm UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215/3 "2013-11-17T17:08:00Z")

</div>

> [@Gehberger](#):
>
> Hallo, Gibt es eine fertige Umwandlungsmethode um aus Tags web-sichere Dateinamen zu erzeugen? ...

Was du mit "web-sicher" oder "web-valide" genau meinst, das müsstest du ausführlicher beschreiben.  
Eigentlich sollte im Web jedes Zeichen aus dem UTF-8 Standard abgebildet werden können.

Vielleicht meinst du den beschränkten Zeichensatz, wenn es darum geht, eine Datei in einem Dateisystem zu speichern, und zwar so, dass sie auf jedem x-beliebigen Server gespeichert werden kann, ohne Änderung von möglicherweise illegalen Sonderzeichen im Dateinamen.  
Vielleicht meint du also das prophylaktische "sanitizing" von Dateinamen.

Mp3tag hat die Skript Funktion $validate, die die gröbsten Fehler für den Dateinamen und Dateipfad ausblenden kann.

Zur automatischen Umwandlung von diakritischen Zeichen gibt es eine fertige Funktion nicht.  
Aber mit den Skript-Funktionen $replace oder $regexp kann man einen "Sanitizer" in einer Aktionengruppe zusammenbauen.  
Die in Mp3tag verwendete Regex Maschine ist dort erklärt ... [http://www.boost.org/doc/libs/1\_31\_0/libs/...doc/syntax.html](http://www.boost.org/doc/libs/1_31_0/libs/regex/doc/syntax.html)  
[http://www.boost.org/users/index.html](http://www.boost.org/users/index.html)

Als Anregung zum Selberbauen ...  
[http://stackoverflow.com/a/17186583](http://stackoverflow.com/a/17186583)

Siehe auch dort, ob das noch zu gebrauchen ist ...  
Unicode to ASCII  
[Unicode to ASCII](https://community.mp3tag.de/t/7279/1)

DD.20131117.1936.CET

---

<div class="post-metadata">

### Author: ![beg](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/b/6f9a4e/32.png) [@beg](https://community.mp3tag.de/u/beg)
#### Post date: [November 17, 2013, 6:10pm UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215/4 "2013-11-17T18:10:43Z")

</div>

Danke für die Rückmeldungen.

validate hilft nicht, da eben es eben "nur" für Windows-Dateinamen korrigiert.

Ok, um es vielleicht möglichst einfach genauer zu beschreiben: Ich brauch filenamen, die so auch als URL funktionieren. Ok, auch hier gibt es theoretisch Sonderzeichen - funktionieren meines Wissens nach bis jetzt nicht zuverlässig. Also bräuchte ich ähnliche/gleiche Regeln für Dateinamen wie sie für TLDs (Domainnamen) gelten. Sprich keine Sonderzeichen ([]%/, ü, ä, ö, ó, í, etc.) und keine Leerzeichen, etc...)

Leider bin ich wirklich nicht gut genug um mir sowas aus regular expressions selber zu bauen...

lg,  
Bernhard

---

<div class="post-metadata">

### Author: ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)
#### Post date: [November 17, 2013, 6:17pm UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215/5 "2013-11-17T18:17:35Z")

</div>

> [@Gehberger](#):
>
> ... Ich brauch filenamen, die so auch als URL funktionieren. ... Also bräuchte ich ähnliche/gleiche Regeln für Dateinamen wie sie für TLDs (Domainnamen) gelten. ...

Wenn du die Regeln klar beschreiben kannst, dann können wir bestimmt weiter helfen.

??? Meinst du vielleicht so etwas wie das ...

> [@](#):
>
> Note that while upper and lower case letters are allowed in domain  
> names, no significance is attached to the case. That is, two names with  
> the same spelling but different case are to be treated as if identical.
> 
> The labels must follow the rules for ARPANET host names. They must  
> start with a letter, end with a letter or digit, and have as interior  
> characters only letters, digits, and hyphen. There are also some  
> restrictions on the length. Labels must be 63 characters or less.

... oder so ...

> [@](#):
>
> Die Übertragung von Dateien im World Wide Web ist durch den HTTP-Standard geregelt. Enthält ein Dateiname Zeichen außerhalb der ASCII-Buchstaben und -Ziffern, so werden diese in der URL in einer %-Darstellung codiert mit einem Prozentzeichen, gefolgt von einem Zwei-Zeichen-Code in hexadezimaler Form, etwa „haust%FCr.html“ statt „haustür.html“. Um den Codewert ermitteln zu können, ist die Kenntnis der Zeichencodierung (zum Beispiel UTF-8 oder ISO 8859-1) des Dateinamens nötig  
> Dateidownload: Der FTP-Standard sieht nur ASCII-Zeichen als zwingend unterstützt vor.

DD.20131117.2044.CET

---

<div class="post-metadata">

### Author: ![beg](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/b/6f9a4e/32.png) [@beg](https://community.mp3tag.de/u/beg)
#### Post date: [November 17, 2013, 9:14pm UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215/6 "2013-11-17T21:14:05Z")

</div>

ok, der Dateiname sollte im Prinzip keine anderen Zeichen enthalten als:

A-Z, 0-9, Bindestrich, Unterstrich

FTP Übertragung ist case sensitive. Also alles in Gross- oder Kleinbuchstaben wäre sinnvoll.

Also aus:

$upper(%title% - %genre% - %year% - %artist% - %album%)

mit

Mi taza de café (Bsp) - Tango - 1944-01-01 - Orquesta Típica Victor - tango.at v1

sollte werden:  
MI\_TAZA\_DE\_CAFE\_BSP-TANGO-1944-01-01-ORQUESTA\_TIPICA\_VICTOR-TANGO\_AT\_V1

lg,  
Bernhard

---

<div class="post-metadata">

### Author: ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)
#### Post date: [November 18, 2013, 6:18am UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215/7 "2013-11-18T06:18:29Z")

</div>

> [@Gehberger](#):
>
> ok, der Dateiname sollte im Prinzip keine anderen Zeichen enthalten als: A-Z, 0-9, Bindestrich, Unterstrich  
> FTP Übertragung ist case sensitive. Also alles in Gross- oder Kleinbuchstaben wäre sinnvoll.  
> Also aus: $upper(%title% - %genre% - %year% - %artist% - %album%) mit  
> Mi taza de café (Bsp) - Tango - 1944-01-01 - Orquesta Típica Victor - tango.at v1  
> sollte werden:  
> MI\_TAZA\_DE\_CAFE\_BSP-TANGO-1944-01-01-ORQUESTA\_TIPICA\_VICTOR-TANGO\_AT\_V1  
> lg, Bernhard

Ausgabebeispiel:  
MI\_TAZA\_DE\_CAFÉ\_BSP-TANGO-19440101-ORQUESTA\_TÍPICA\_VICTOR-TANGO\_AT\_V1  
Format string:

**$upper($replace(%TITLE%' - '%GENRE%' - '$replace(%YEAR%,'-',)' - '%ARTIST%' - '%ALBUM%,'(',,')',,'.','\_',' ','\_','\_-\_','-'))**

Nun musst du noch die diakritischen Zeichen umwandeln, dafür benutzt du die Aktionengruppe "UniToAsc.Diacritics".

DD.20131118.0825.CET

---

<div class="post-metadata">

### Author: ![beg](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/b/6f9a4e/32.png) [@beg](https://community.mp3tag.de/u/beg)
#### Post date: [November 18, 2013, 9:28am UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215/8 "2013-11-18T09:28:04Z")

</div>

Vielen Dank Detlev!

Leider muss ich noch kurz wegen der Aktionsgruppe nachfragen.. Ich hab noch nie eine "externe" Aktionsgruppe verwendet. Bin draufgekommen, dass im Programmverzeichnis data/actions .MTA files stehen. Ich hab Deine Vorgeschlagene dazukopiert. Sie wird aber nicht als Aktion im Aktionsmenü angezeigt?!

Was mach ich da falsch?

Vielen Dank für Deine Hilfe!

lg,  
Bernhard

---

<div class="post-metadata">

### Author: ![ohrenkino](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ohrenkino/32/4843_2.png) [@ohrenkino](https://community.mp3tag.de/u/ohrenkino)
#### Post date: [November 18, 2013, 9:54am UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215/9 "2013-11-18T09:54:54Z")

</div>

ggf. ist das der falsche Ort. Versuch mal  
%appdata%\mp3tag\data\actions

---

<div class="post-metadata">

### Author: ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)
#### Post date: [November 18, 2013, 10:03am UTC](https://community.mp3tag.de/t/web-valide-dateinamen-aus-tags-erzeugen/15215/10 "2013-11-18T10:03:03Z")

</div>

> [@Gehberger](#):
>
> Vielen Dank Detlev!  
> Leider muss ich noch kurz wegen der Aktionsgruppe nachfragen.. Ich hab noch nie eine "externe" Aktionsgruppe verwendet. Bin draufgekommen, dass im Programmverzeichnis data/actions .MTA files stehen. Ich hab Deine Vorgeschlagene dazukopiert. Sie wird aber nicht als Aktion im Aktionsmenü angezeigt?! ...

Das Programmverzeichnis ist dafür nicht der richtige Ort.  
Die MTA Dateien gehören in das Anwenderverzeichnis  
bei Win XP: "%APPDATA%\Mp3tag\data\actions"  
bzw.  
"%APPDATA%\Roaming\Mp3tag\data\actions"

Um die ganze Sache rund laufen zu lassen, schlage ich folgende Schritte vor.

1. Ein neues Tag-Feld FN\_NEU formatieren mit der Aufbereitungsfunktion wie schon gezeigt.
2. Ein neues Tag-Feld UNI\_TO\_ASC formatieren mit %FN\_NEU%.
3. Die Aktionengruppe UniToAsc.Diacritics ausführen.  
Diese Aktionen erwarten das Tag-Feld UNI\_TO\_ASC.  
Danach sollte im Tag-Feld UNI\_TO\_ASC das bereinigte Ergebnis zu sehen sein.
4. Tag-Feld FN\_NEU formatieren mit %UNI\_TO\_ASC%
5. Tag-Feld UNI\_TO\_ASC entfernen.
6. Dateiname formatieren mit %FN\_NEU%.
7. Tag-Feld FN\_NEU entfernen.

Das kann man auch kürzer fassen, aber so hast du erst einmal die Gelegenheit, jeden Schritt einzeln zu verfolgen.

Alle Schritte lassen sich in drei Aktionengruppen verteilen.

1. Aktionengruppe für Aufbereitung und Vorbereitung für Nr. 2
2. Aufruf Aktionengruppe UniToAsc.Diacritics
3. Aktionengruppe für Nachbereitung.

Wenn alles funktioniert, dann kann man die drei Aktionengruppen über "Aktionengruppen/Utils" zu einer Meta-Gruppe zusammenfassen.

DD.20131118.1209.CET
