Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.

BBCode ist eingeschaltet
[img] ist eingeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Ansicht erweitern Die letzten Beiträge des Themas: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von ds10 » 17 Mai 2021, 13:09

buers hat geschrieben: 17 Mai 2021, 12:42 Ja, das kann ich mir schon gut vorstellen, wie sowas gewachsen ist ...
Ich nehme an: "Würde für jeden Parameter genau eine Zeile verwendet, gäbe es gar keine Problem." ist hypothetisch gemeint, in der Art: Wenn man das von Anfang an so designed hätte und nicht in der Art: "wenn du für jeden Parameter eine Zeile nehmen würdest".
Ja, ist hypothetisch gemeint.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von buers » 17 Mai 2021, 12:42

Ja, das kann ich mir schon gut vorstellen, wie sowas gewachsen ist ...
Ich nehme an: "Würde für jeden Parameter genau eine Zeile verwendet, gäbe es gar keine Problem." ist hypothetisch gemeint, in der Art: Wenn man das von Anfang an so designed hätte und nicht in der Art: "wenn du für jeden Parameter eine Zeile nehmen würdest".

Das mit den leeren Parameter habe ich schon hingekriegt. War nur als Hinweis, dass da vielleicht noch ein Fehler verborgen ist. Ich hätte auf Anhieb erwartet, dass das aufgerufene Programm bei

Code: Alles auswählen

"{ParameterLeer}" "{ParameterMitInhaltHugo}"
aufgerufen wird mit

Code: Alles auswählen

irgendwas.exe "" "Hugo" 
Dann sieht das Programm als ersten Parameter den Leerstring. Aber mit dem ganzen Quoting/Escaping bin ich jetzt vielleicht durcheinander gekommen.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von ds10 » 17 Mai 2021, 12:11

Das Problem ist einfach historisch begründet. Der Fehler war letztendlich die Parametereingabe als Freitext zu gestalten, dadurch hat man keine Möglichkeit zu wissen, was als ein Parameter aufzufassen ist, weshalb dann mit Anführungszeichen gearbeitet werden muss, was dann wiederum zu doppelten Escape-Sequenzen führt.

Würde für jeden Parameter genau eine Zeile verwendet, gäbe es gar kein Problem.

Für leere Parameter gibt es die Funktion {isset()}, damit kann man z.B. {isset(url,"no-url")} festlegen und der Parameter taucht an der korrekten Stelle auf.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von buers » 17 Mai 2021, 10:45

So, habe das nochmals getestet und geprüft - jetzt auch mit tvb 4.2.3. Ich komme zurecht und kriege hin, was ich will. Dennoch paar Kommentare. Zuerst: Du hattest etwas andere Ergebnisse in deinen Tests, wie man ein externes Programm aufrufen muss, als ich. Ich denke, ich habe den Grund gefunden. Für mich war eigentlich die Referenz, ein kompiliertes C oder C++ Programm mit Standard Windows Tools. Jetzt musste ich feststellen: Es macht einen Unterschied ob ich den Microsoft C++ Compiler nehme oder Gcc. Offenbar ist der Startup-Code (der immer dazu gelinkt wird, und der die C++ main bzw. Windows-typisches wmain aufruft) in beiden unterschiedlich implementiert. Der entscheidenden Unterschied bei Aufruf über Programm/Windows API (nicht über cmd.exe):

Aufrufparameter: "a """b""" c" -> funktioniert mit MSC und Gcc, Programm erhält ein Argument: a "b" c
Aufrufparameter: "a ""b"" c" -> funktioniert mit MSC Programm erhält ein Argument: a "b" c, funktioniert nicht mit Gcc. Programm erhält zwei Argumente.

Hat gedauert, bis ich das begriffen hatte ... Wie bemerkt, der Unterschied liegt im aufgerufenen Programm.

Zu TVB 4.2.3 - hatten wir schon andiskutiert: Bei Username: Computer\User muss man jetzt den Backslash verdoppeln (jedenfalls unter WIndows, wenn das aufrufende Programm ein Executable ist - bei /bin/sh braucht man vielleicht 4, aber da wird man typischerweise keinen Backslash im Usernamen haben), in 4.2.2 nicht. In der Diskussion oben nanntest du, man müsse den Backslash vervierfachen. Ich vermute, dass über diese Änderung viele Windows-User stolpern werden (viele von denen, die das Feature verwenden).

Für mich ist das damit grundsätzlich abgeschlossen, da ich alles hinkriege, wie ich es brauche. Dennoch paar Anmerkungen, vielleicht Inspiration, wie man das Interface besser machen könnte.

Es gibt keine leichte Verlässlichkeit, das wievielte Argument welchen Inhalt hat. Konstruiertes Beispiel: "{episode}" "{url}". url sei nicht leer. Je nachdem, ob episode leer ist oder nicht, wird url als erstes oder als zweites Argument übergeben. Der aufgerufene Prozess kann nur raten. (Ich nutze Workaround - noch ein Leerzeichen dazu packen zwischen die Quotes. Erwartet hätte ich, dass ein leeres Argument übergeben wird ohne den Workaround.

Wenn man clean() benutzt ist alles einfach. Ist aber für sowas wie description ungeeignet, besonders in der deutschen Sprache. Man kann sich fragen, ob jemals jemand {description} haben möchte, und das empfangende Programm (sei es ein kompiliertes Executable oder ein .cmd oder) will das in einzelne Wörter auseinandergebrochen. Meines Erachtens wäre es naheliegender, das per default als ein Argument zu übergeben. (Und für sehr spezielle Ausnahmefälle eine Funktion wie break_into_words(description) zu nutzen. Und meines Erachtens sollte dann der aufrufende Code halt auch transparent alles tun, um da Quotes oder jedes andere Zeichen innerhalb der description korrekt zu übergeben (ohne dass man zu escapequotes oder replace greift - ich kann mir schwer vorstellen, dass jemand description oder andere Textfelder sinnvoll nutzen kann, ohne replace/escapequotes/clean. Ich nehme an, neben Quotes sind primär Backslashes problematisch. Bei Skripten braucht man unter Windows wohl noch replaceNewline(), bei exes habe ich da kein Problem. Mein Beispiel von dem unterschiedlich implementierten Startup-Code macht das Ganze allerdings schwierig, aber immerhin \" und """ funktionierten verlässlich in allen meinen getesteten Varianten, "" leider nicht.

Zu den Variablen: Meines Erachtens wirklich nicht intuitiv, dass man da Backslash verdoppeln muss. Hier bin ich ja wirklich an einer User-Schnittstelle. Dass man in Programmcode auf Backslash aufpassen muss ist klar. Aber in einer Maske (die nicht explizit Code verlangt) eines Programms - das ist wirklich überraschend. (Keine Frage, ist der Passwort-Übergabe-Mechanismus in Klartext von vorne herein fragwürdig. In einer typischen kontrollierten Heim-Umgebung aber für mich schon noch ok)

Nochmals: Danke für die Unterstützung!

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von buers » 22 Mär 2021, 17:06

Danke dir für die ausführliche Antwort. Ich schaue mir das nochmals genauer an, bin aber grade etwas knapp mit der Zeit dafür. Melde mich nochmals dazu und teste das auch Mal mit deinen Programmen.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von ds10 » 21 Mär 2021, 22:13

Einfach ein simples Beispiel, nehmen wir an im Text bei description steht a "b" c, im Aufnehmen-Feld der Aufnahmesteuerung steht "{escapeQuotes(description)}" die Ausgabe der Aufnahmesteuerung für die übergebenen Parameter lautet dann "a \"\"b\"\" c". Die Backslashes dienen dem Programmstarter von TV-Browser als Escape-Sequenz, um die Anführungszeichen nicht als Trenner von Parametern wahrzunehmen. Also Backslash erkannt->nächstes Zeichen in Parameter übernehmen. Das war bisher nicht so, daher jetzt die vier Backslashes, auch die zwei die man vorher brauchte waren schon nicht so schön, aber der Backslash diente halt bisher schon als Escape-Sequenz innerhalb der Parameter. Anstelle der vier Backslashes kann man aber auch einfach jeweils einen Slash nehmen, wenn es sich um Pfadangaben handelt. Beim Rechnernamen geht das aber vermutlich nicht.

Im Ergebnis erkennt TV-Browser "a \"\"b\"\" c" als einen Parameter und übergibt diesen dann auch explizit als einen Parameter an das System und zwar als a ""b"" c, die äußeren Anführungszeichen werden entfernt. Weil es explizit als ein Parameter übergeben wird reichen dann für das Autohotkey-Skript die zwei Anführungszeichen, da ja die äußeren fehlen. Würde man hier drei Anführungszeichen übergeben, dann würde es nicht funktionieren.

Welche Funktion von Java im Hintergrund beim Starten von Programmen auch immer aufgerufen wird, dieser werden die Parameter explizit als einzelne Parameter übergeben, daher auch keine äußeren Anführungszeichen.

Wie gesagt, mit Hilfe von replace kannst du testen, ob es mit drei Anführungszeichen plus äußeren Anführungszeichen funktioniert, wenn du das Aufnahmeprogramm aufrufst "\\"{replace(description,"%"::%\%"%\%"%\%"")}\\"", ich vermute aber das es dann nicht funktioniert, denn Autohotkey interpretiert das dann als einzelne Parameter ab dem ersten Anführungszeichen im Text. Probiere außerdem "{replace(description,"%"::%\%\%\%"")}", wenn ich weiß, dass \" als Escape-Sequenz auch bei deinem Aufnahmeprogramm funktioniert, dann kann ich replaceQuotes entsprechend ändern, denn dann dürfte es bei anderen auch funktionieren, denn bei Autohotkey geht es so auch. Bevor ich nicht weiß, was bei deinem Aufnahmeprogramm funktioniert bzw. ob es überhaupt funktioniert, kann ich auch keine Anleitung schreiben, denn es ist ja alles noch in Entwicklung.

Möglicherweise kommt einfach das Aufnahmeprogramm mit Anführungszeichen nicht klar und sucht die Kommandozeile einfach stur nach Anführungszeichen ab.

Letztendlich ist das auch genau der Grund, warum sich die Aufnahmesteuerung standardmäßig nicht um solche Dinge kümmert, jedes Programm kann es anders handhaben und es gibt keine Garantie, dass es auf eine bestimmte Weise funktioniert.

Hier das Autohotkey-Skript, das lässt sich zur EXE kompilieren, wenn Autohotkey installiert ist:

Code: Alles auswählen

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

Loop, %0%  ; For each parameter:
{
    param := %A_Index%  ; Fetch the contents of the variable whose name is contained in A_Index.
    MsgBox, 4,, Parameter number %A_Index% is %param%.  Continue?
    IfMsgBox, No
        break
}
Dass mit dem Passwort stimmt, war auch bisher schon so, wenn da ein Backslash drin vorkam und mit Anführungszeichen im Passwort ging es bisher gar nicht. An sich ist es auch keine schöne Lösung das Passwort im Klartext über die Kommandozeile zu schicken. Wenn sich mit escapeQuotes eine funktionierende Lösung ergibt, kann man die aber beim Passwort mit Anführungszeichen auch verwenden, nur beim Backslash bliebe das Problem.

Die Aufnahmesteuerung richtet sich jedenfalls eher an Poweruser, da sehr komplex, allein mit den Einstellungen sind viele schon überfordert und sie wurde auch nicht von mir programmiert, sondern ist mir nur in den Schoß gefallen, weil alle anderen Entwickler von TV-Browser vor über 10 Jahren schon abgesprungen sind.

EDIT: Ich habe hier außerdem ein kleines Java-Tool geschrieben, was auch die Parameter mit Nummer ausgeben kann. Da muss man als zu startendes Programm die java.exe auswählen und als Parameter -jar "LAUFWERK:/PFAD/ParameterPrinter.jar" "{escapeQuotes(description)}" Auch damit funktioniert es sowohl mit zwei Anführungszeichen, als auch mit Backslash und einem Anführungszeichen.
Dateianhänge
ParameterPrinter.jar
(886 Bytes) 262-mal heruntergeladen

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von buers » 21 Mär 2021, 20:57

Zwei Anführungszeichen funktionieren nicht, ich hatte Beispiele genannt. Auch Google bestätigt das. Zwei Anführungszeichen funktionieren in csv (z.B. mit Excel). Vielleicht kommt daher die Verwechslung.
Autohotkey verstehe ich jetzt nicht, was du damit meinst. Hast du die Ausgabe gekriegt für einfaches

Code: Alles auswählen

"{escapeQuotes(description)} "
. Verstehe jetzt nicht, wie das dort so ankommen kann. Allerdings weiß ich natürlich auch nicht, was Java wirklich macht (habe einen Teil vom TVB Code angesehen).

Wenn ich mit meinen trivialen Testprogrammen probiere:

Code: Alles auswählen

"a \"\"b\"\" c"
Calling echoarg "a \"\"b\"\" c"
Arg 0 Start:echoarg:End
Arg 1 Start:a ""b"" c:End
Das ist vollkommen erwartungsgemäß. 1 Argument, doppelte Quotes. In deinen Beispielen ist mir nicht immer klar, ob da noch Java Escapes mit dargestellt werden. Bei meinen Beispielen gebe ich den "User-String" aus. In C-Quelltext muss vor jeden Backslash ein weiterer, vor jedes Gänsefüßchen (im User-String) auch ein Backslash.

Übrigens wirkt es bei mir so, als wäre (letztlich and die Windows-Api) folgender String weitergegeben worden, von TVB:

Code: Alles auswählen

Calling echoarg "a ""b"" c"
Arg 0 Start:echoarg:End
Arg 1 Start:a "b:End
Arg 2 Start:c:End
Wie das Autohotkey wieder zusammengesetzt kriegt, ist mir ein Rätsel. Und natürlich ist es nicht leicht nachvollziehbar, was da draus gemacht wird. Windows halt ... Aber das kann man so wirklich vielerorts nachlesen, kommt nicht nur von mir.

Das mit den 4 Backslashes verstehe ich durchaus einigermaßen. (Ich hatte mal sed-Skripte geschrieben, die Backslash Quote ersetzen musste, die Backslashes, die man da braucht, kann man nicht mehr zählen .... Die Shell nimmt welche weg, und sed natürlich auch und dann wird jeweils für das Quote Zeichen noch ein zusätzlicher gebraucht). An dieser Stelle von TVB (das ist ja eigentlich schon ein User-Interface, wenn man den Einstellungsdialog ansieht) ist es für mich überraschend. Da würde ich einfach erwarten, dass das Programm das macht, was immer notwendig ist, um genau den String den ich eingebe, weiterzugeben. Bei Sonderzeichen im Passwort muss man das dann vermutlich auch so machen. Aber klar, ich mache nicht die Regeln. War halt gestern noch anders. Ich habe einige Tools geschrieben für csv. Da hatte ich es immer so gemacht. User gibt ein, für Zelle xy.

Code: Alles auswählen

Das gibt der User ein, und es enthält "zitierten Text" und mehr, \ macht hier kein Problem und benötigt kein Escape
Daraus macht dann mein Programm transparent für den User

Code: Alles auswählen

"Das gibt der User ein, und es enthält ""zitierten Text"" und mehr, \ macht hier kein Problem und benötigt kein Escape"
(Hier geht es wie gesagt mit doppelten Gänsefüßchen. https://tools.ietf.org/html/rfc4180)

Ist nicht mein Programm. Und das Programm ist toll - also bitte nicht falsch verstehen. Mir ist auch klar, dass ich hier nicht die Regeln mache. Aber so wird es für Nutzer schon schwierig. Das braucht dann wirklich exakte Doku (die ich natürlich gewollt bin, zu befolgen)

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von ds10 » 21 Mär 2021, 20:02

Ich habe hier ein Testskript von Autohotkey und dort wird wie erwartet "{escapeQuotes(description)}" als ein Parameter ausgegeben. Das mit computer\benutzer hätte eigentlich vorher schon nicht funktionieren sollen, denn um einen Backslash auszugeben, muss man vier Backslashes eintragen, da der Backslash ja auch als Escape-Zeichen dient (und zwar doppelt, einmal Java-spezifisch, um einen Backslash zu schreibeneinmal für die Parameter und dann noch einmal für den Aufbau der Kommandozeile), also computer\\\\benutzer ergibt als Parameter, der an das System übergeben wird, dann computer\benutzer. Zuvor mit der offiziellen Beta-Version waren es aber noch zwei Backslashes die ausgereicht haben. Mit escapeQuotes wird unter Windows "" für einzelne Anführungszeichen im Text an das System übergeben.

Man sieht ja auch, dass die Trennung der Parameter bei deiner ersten Ausgabe an einer völlig unerwarteten Stelle passiert, nämlich nicht etwa beim ersten auftreten des Anfrühungszeichens, sondern erst beim nächsten Leerzeichen. Möglicherweise würde das Aufnahmeprogramm auch einfach \" erwarten, das funktioniert mit Autohotkey beim Test auch. Ich hatte nur "" genommen, weil das früher typisch für Windows war oder es braucht noch eine weitere Einrahmung mit Anführungszeichen "\\"{escapeQuotes(description)}\\""
parameter1.png
parameter1.png (11.12 KiB) 6400 mal betrachtet
parameter2.png
parameter2.png (17.74 KiB) 6400 mal betrachtet
übergabe.png
übergabe.png (22.02 KiB) 6400 mal betrachtet
Es spielt hier keine Rolle, ob man noch die zusätzlichen Anführungszeichen vor und nach {escapeQuotes(description)} verwendet oder nicht, es wir immer als nur ein Parameter übergeben und vom Skript auch so akzeptiert.

EDIT:
Du könntest es mit "{replace(description,"%"::%\%\%\%"")}" probieren, das entspricht dann \" in der Übergabe an das zu startende Programm und zusätzlich vielleicht noch mit den einrahmenden Anführungszeichen: "\\"{replace(description,"%"::%\%\%\%"")}\\"". Im Prinzip kannst du mit replace alle denkbaren Varianten durchspielen, denn escapeQuotes macht ja auch nichts anderes, als die Anführungszeichen mit Escape-Sequenzen zu ersetzen. Vor einem Anführungszeichen, das als Text übergeben werden soll, muss aber in jeden Fall ein Backslash stehen, damit TV-Browser das nicht als neuen Parameter interpretiert.

Das Einzige was ich an escapeQuotes jetzt noch ändern könnte wäre statt "" auch bei Windows \" für Text-Anführungszeichen zu verwenden.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von buers » 21 Mär 2021, 18:51

Die Replace Methode funktioniert bei mir mit jetzt mit % als Escape, wie von dir angekündigt.
EscapeQuotes funktioniert nicht korrekt bei mir. Test wiederum Bares für Rares, 22.03. ZDF 15:05. Für EscapeQuotes der Description kommen 5 Argumente an:

Code: Alles auswählen

1:Wertvoll oder wertlos? Ob alter Krimskrams oder edle Rarität: In Horst Lichters Trödel-Show kann jeder seltene Fundstücke aus Keller oder Garage schätzen lassen.

Die Geschichte der Kuriositäten, viele Schätze und noch mehr Raritäten, hammerhartes Verhandeln mit Lachen, Tränen und manchen Überraschungen - das alles bietet Horst Lichter in "Bares
2:für
3:Rares.
©
4:by
5:ZDF/TV-Browser
Erwarten würde ich ein Argument:

Code: Alles auswählen

Wertvoll oder wertlos? Ob alter Krimskrams oder edle Rarität: In Horst Lichters Trödel-Show kann jeder seltene Fundstücke aus Keller oder Garage schätzen lassen.

Die Geschichte der Kuriositäten, viele Schätze und noch mehr Raritäten, hammerhartes Verhandeln mit Lachen, Tränen und manchen Überraschungen - das alles bietet Horst Lichter in "Bares für Rares".
© by ZDF/TV-Browser
Mein Aufnahme-Scheduler meldet einen Fehler zurück (Ursache kommt gleich). TVB nennt mir dann "Gesendete Parameter":

Code: Alles auswählen

202103221500ZDF computer\user *** 22/03/2021 15:00 4200 102 20210322_1500_ZDF_Bares_f_r_Rares "ZDF" "Bares für Rares" "Die Trödel-Show mit Horst Lichter" "Information/Unterhaltung (Informierende Unterhaltung - Unterhaltung allgemein)" "2021" "Deutschland" "Wertvoll oder wertlos? Ob alter Krimskrams oder edle Rarität: In Horst Lichters Trödel-Show kann jeder seltene Fundstücke aus Keller oder Garage schätzen lassen.

Die Geschichte der Kuriositäten, viele Schätze und noch mehr Raritäten, hammerhartes Verhandeln mit Lachen, Tränen und manchen Überraschungen - das alles bietet Horst Lichter in \"\"Bares für Rares\"\".
© by ZDF/TV-Browser" "" "" "" "" "" "" 
Das doppelte \"\" funktioniert offensichtlich nicht. Probiere das später nochmals mit meinem Testprogramm. Zusätzlich scheint ein neues Verhalten da, bei Übergabe des Usernamens. Windows-typisch ist der "computer\user" (und so auch in den Einstellungen von Aufnahmesteuerung konfiguriert. Der Fehleroutput von TVB sagt auch exakt das. Aber ankommen tut "computeruser", der Backslash ist verschluckt. Gestern ging das noch anders. Oder habe ich das was übersehen?

Ergänzung: Habe nochmal mit Nightly von gestern gegengeprüft: Da wurde der Backslash beim Benutzer noch nicht verschluckt. Das kuriose "März" für URL ist dafür beim heutigen Nighly verschwunden, war gestern drin.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von ds10 » 20 Mär 2021, 20:39

Okay, wenn ich es mit einem Programm anstatt WScript probiere, bekomme ich die Anführungszeichen auch übergeben. Also reicht ab morgen einfach "{escapeQuotes(description)}" um die Anführungszeichen korrekt übergeben zu bekommen.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von buers » 20 Mär 2021, 18:37

Kurze Rückmeldung noch zur Nightly von heute - die Parameter wie genre gehen wieder, danke!
Eine Kleinigkeit noch, mit {url} sehe ich sonst oft einen omdb Link. Probiere ich ZDF, 31.03. 15:05 Bares für Rares (weil ich halt weiß, dass da immer die Gänsefüßchen sind), kommt für die URL "März" - hmm? Habe aber jetzt nicht weiter getestet.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von buers » 20 Mär 2021, 18:21

Wie hast du denn das Escape gemacht? vbscript kenne ich mich nicht aus. Sorry, falls ich dich mit den 3 Quotes auf die falsche Spur gebracht habe. Für C/C++ Programme habe ich probiert: Standard C Funktion system() (ruft mit dem übergebenen String cmd.exe /c auf) und die Windows-API Funktion CreateProcess. Verhalten sich diesbezüglich identisch. Habe jeweils aufgerufen ein Programm, das nur die übergebenen Argumente ausgibt.

Code: Alles auswählen

echoarg a b c
echoarg "a b c"
echoarg "a ""b"" c"
echoarg "a """b""" c"
echoarg "a \"b\" c"
echoarg a \"b\" c
Ausgabe

Code: Alles auswählen

Calling echoarg a b c
Arg 0 Start:echoarg:End
Arg 1 Start:a:End
Arg 2 Start:b:End
Arg 3 Start:c:End
Calling echoarg "a b c"
Arg 0 Start:echoarg:End
Arg 1 Start:a b c:End
Calling echoarg "a ""b"" c"
Arg 0 Start:echoarg:End
Arg 1 Start:a "b:End
Arg 2 Start:c:End
Calling echoarg "a """b""" c"
Arg 0 Start:echoarg:End
Arg 1 Start:a "b" c:End
Calling echoarg "a \"b\" c"
Arg 0 Start:echoarg:End
Arg 1 Start:a "b" c:End
Calling echoarg a \"b\" c
Arg 0 Start:echoarg:End
Arg 1 Start:a:End
Arg 2 Start:"b":End
Arg 3 Start:c:End
Es funktioniert hier also auch \" neben """. Ich erinnere mich aber, dass ich früher mal zu dem Schluss kam, dass die 3 Quotes zu bevorzugen sind. Kann das aber nicht mehr nachvollziehen. Sorry. Vielleicht war das beim Mischen von batch und Programmen. Meine Projekte sind normalerweise auch (möglichst) OS-unabhängig. Da wollte ich das bestimmt nicht freiwillig machen. (Mein Beispielprogramm mit den fürchterlichen Windows-Spezifika am Anfang war einfach, weil ich sonst keine Möglichkeit sehe, wirklich Sonderzeichen hinzukriegen unter Windows. Parameterübergabe in einfachen chars und UTF8 funktioniert halt nicht unter Windows wie unter Linux).

Kann deine Argumente nachvollziehen, dass man das im Nachhinein nicht leicht hinkriegt. Liegt auch bisschen daran, dass Quotes anders als Klammern halt nicht schachteln. 4 Quote Zeichen können halt auf 2 Arten interpretiert werden.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von ds10 » 20 Mär 2021, 14:40

Ich habe jetzt noch einige Tests unter Windows gemacht, als Ergebnis steht fest, dass man die Anführungszeichen an z.B. VBScript nicht weiter geben kann, escapeQuotes sorgt dafür dass TV-Browser-intern die Parameter korrekt ermittelt werden. Das interessiert VBScript aber dann doch nicht oder man muss irgendwie noch mehr Anführungszeichen einbauen, man kann aber mit replace("%"::%"%"") erreichen, dass die im Text vorhandenen Anführungszeichen von VBScript ignoriert werden und somit der gesamte Text als ein Parameter ankommt, aber eben ohne Anführungszeichen.

Ab der morgigen Nightly ändert sich das Escape-Zeichen für Escape-Sequenzen in Strings von Funktionen von / zu %, da / für die Verzeichnisse unter unixoiden Betriebsysystemen benötigt wird.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von ds10 » 20 Mär 2021, 11:43

Das lässt sich halt schlecht automatisch machen, denn das Parameter-System gilt für TV-Browser als Ganzes, d.h. man kann nicht einfach die Anführungszeichen mit einer Escape-Squenz ersetzen, da man nicht sicher sein kann, dass das an der Stelle erwünscht ist. Daher habe ich jetzt eine Funktion escapeQuotes hinzugefügt, die bei Bedarf die Anführungszeichen ersetzt.

Dass die Escape-Sequenz nicht funktioniert hat, lag nicht an der Aufnahmesteuerung, sondern beim Starten von externen Programmen, dort wurde das nicht beachtet, sondern jedes Anführungszeichen für den Anfang/das Ende eines Parameters interpretiert.

Ab der morgigen Nightly sollte es also mit escapeQuotes korrekt funktionieren.

Re: Aufnahmesteuerung behandelt Gänsefüßchen nicht korrekt

von buers » 19 Mär 2021, 19:49

Danke dir sehr!

Code: Alles auswählen

"{replace(description,"/"::“")}"
funktioniert praktisch perfekt. Das ist das Zeichen Unicode U+201C, (linkes) doppeltes Anführungszeichen. Du hast vollkommen recht - ich will da nicht mit dem Kopf durch die Wand. Es geht eigentlich garnicht um das Anführungszeichen, sondern das außen rum. Jetzt erscheint auch der gesamte Text (vorher hatte TV-Browser immer was verschluckt, nehme an durch den Instring-Status, der nicht mehr passte bei String in String). Wird nun auch alles schön als ein (1) einziges Argument übergeben.

Es scheint, du bist der / einer der Entwickler? (Sorry, bin neu hier ...)
Vielleicht magst du dir trotzdem nochmal überlegen, ob das Quoting innerhalb von (Beschreibungs-)Text nicht "korrekter" gemacht werden kann. Für mich persönlich aber kein Thema mehr, da die Lösung geht. (Selbst kenne ich das aber auch zu Genüge von eigenen Tools, PITA ...) Aber anzunehmen, dass jeder, der "schöne" {description} nutzen will ohne clean, darüber stolpern muss. (Nicht gleich, weil die meisten Beschreibungen kein Quote nutzen).

Nach oben