escape-Funktion für Export-Konfigurationen

Hallo,

vielleicht gibt es das Feature schon, aber ich finde es nicht. Dann ignoriert bitte den Wunsch und zeigt mir den Weg :-)!

Beim Exportieren der Tags in andere Formate ist oft ein replace nötig, um eine bestimme Syntax zu erfüllen. Zum Beispiel erfordert der Export zu LaTeX die Maskierung verschiedener Sonderzeichen. Ähnliches gibt es in HTML.

Das führt dann zu Zeilen, die dieser:

$replace($replace($replace($replace($replace($replace($replace(%album%,&,\&),#,\#{}),",''),$,\${}),°,\degree{}),¡,!`),'%',\'%'{})

7 Aufrufe von replace (es müssten noch mehr sein, hier sind nur die berücksichtigt, die ich gerade brauche). Geht das auch einfacher?

Meines Erachtens wäre es schön, solche Schachtelaufrufe vorzudefinieren und mittels $escape=TeX(%album%)verfügbar zu machen.

Was meint ihr?

Hee hee, das wär’ ’ne feine Sache. Andererseits ändern sich natürlich »externe Softwares« auch mal, da wäre eine Anpassbarkeit schön. Allerdings habe ich in den letzten Wochen auch ziemlich rumgebastelt, bis ich denn nun endgültig sämtliche potentiell »gefährlichen« Varianten für CMD-Batchfiles rausgefunden und »entschärft« hatte.

Vielleicht mal so als Vorschlag »for the time being«: Wie wär’s, wenn man – vielleicht aufbauend auf einem »Gerüst« hier eine Liste der erfolgreich und gut funktionierenden »Escaping-Funktionen/-Aktionen« im Forum posten würde?

Als Anregung: Wie wäre es, wenn man statt »festen« String-Escape-Funktionen sowas allgemeines einbauen würde, wie etwa
$escape(source_string, liste_der_zu_escapenden_zeichen, escapestring_links, escapestring_rechts)

wobei

liste_der_zu_escapenden_zeichen
entweder eine Liste der Zeichen wäre (halte ich für unflexibel)
oder eine Liste der zu escapenden Strings (viel flexibler)

escapestring_links
der String oder das Zeichen, das zum Escapen links neben dem eigentlichen Zeichen/String eingefügt werden muss

escapestring_rechts
der String oder das Zeichen, das zum Escapen rechts neben dem eigentlichen Zeichen/String eingefügt werden muss (dieser Wert sollte optional weggelassen werden können)

Falls man eine »Liste der zu escapenden Strings« macht, wäre es natürlich sinnvoll, einen (optionalen) Parameter »Listentrennzeichen« zu haben, denn das ist sicher nicht immer gleich. (Wenn Listentrennzeichen angegeben, auswerten, sonst liste_der_zu_escapenden_zeichen als Einzelzeichen behandeln.)

Also etwa:
$escape(source_string, liste_der_zu_escapenden_zeichen, listentrennzeichen, escapestring_links, escapestring_rechts)

Dann gingen solche Sachen wie z.B. für Batch Files
$replace($escape(%string%,'<|>"&^',,^,),'%','%%')

oder für LaTeX (aus dem Kopf, könnte fehlerhaft sein)
$escape(%string%,'$&%#_{}~^',,{,})

oder für irgendwas (mir fällt grad kein Beispiel ein)
$escape(%string%,'der|die|das',|,'[',']')
$escape(%string%,'wer;wie;was',';','<<','>>')

Andererseits ist das alles natürlich nur ein bissl »verkapptes RegExp«, also mein Batch File-Beispiel oben könnte man auch bequem so schreiben:
$replace($regexp(%string%,('[''('')'<|>"&^']'{1}),^$1),'%','%%')

Mal sehen, was die Gemeinde und das Development so meinen :wink:

Die replace Funktion wurde erweitert, man kann beliebig viele Ersetzungspaare anhängen:
$replace(text,a1,a2,b1,b2,c1,c2,...)

Danke für den Hinweis!

Ja wie geil ist DAS denn! Merci
Werden die zusammen oder in Folge (rechts nach links? links nach rechts?) abgearbeitet?

(Doku ist immer ein Problem, ich kenn’ das, aber vielleicht wäre es gut, ab und an die Hilfeseiten mal wieder zu überarbeiten und die ganzen hier verteilt notierten neuen Sachen da einzubauen …)