Seite 1 von 1

Aufnahmesteuerung – Parameter: Quotes entfernen/umwandeln?

Verfasst: 16 Mai 2016, 09:31
von Hospes
Hi,

ich bräuchte nochmal Hilfe.

Ich habe das Problem (-> Ubuntu), dass ich die Parameter-Werte der Aufnahmesteuerung über die Befehlszeile an Bash übergeben muss. Dabei ergeben sich bei der Übergabe mit und ohne umgebende Anführungszeichen ("Text") folgende Ausnahmen:
(Parameter-Wert –> Bash-Eingangs-Wert)

Code: Alles auswählen

dies-ist-ein-Text ⏩ dies-ist-ein-Text
"dies-ist-ein-Text" ⏩ "dies-ist-ein-Text"

Code: Alles auswählen

dies ist ein Text ⏩ dies
"dies ist ein Text" ⏩ dies ist ein Text
Ich kann dies auffangen, indem ich einfach alles MIT Anführungszeichen übergebe und im Script diese wieder entferne. Dies funktioniert aber NUR mit den beiden UMGEBENDEN Anführungszeichen. Wenn der Text aber noch Weitere enthält, passiert folgendes:

Code: Alles auswählen

dies ist "ein" Text ⏩ dies
"dies ist "ein" Text" ⏩ "ein"
dies ist "ein" weiterer "Text" ⏩ dies
"dies ist "ein" weiterer "Text"" ⏩ dies ist "ein
Bei mehr als 2 Paaren insgesamt wird es dann unvorhersehbar.

Also, ich dachte mir, die im Text enthaltenen Anführungszeichen komplett durch andere Unicode-Anführungszeichen (z.B. =U+201D) zu ersetzen.
Doch hier komm ich nicht weiter.

Ein Ansatz war es, dies über {urlencode} zu übergeben und im Script dann wieder zu decodieren.
Problem hierbei: {urlencode} ersetzt Leerzeichen durch "+" – selbst, wenn man diese vorher bereits mit {replace} durch "%20" ersetzt hat. Dadurch werden nachher alle echten "+" fälschlicherweise durch Leerzeichen ersetzt.

So, nun zur Frage: Wie bekomme ich das hin, ohne ein Stück aus der Tischkante zu beißen? :?

Grüße,
Jens

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Verfasst: 16 Mai 2016, 10:26
von ds10
Theoretisch sollte Bash doch auch das Apostroph erkennen als Kennzeichnung für einen Wert akzeptieren und dann alle Anführungszeichen innerhalb ignofieren. Hier könnte es höchstens Probleme mit dem Starten von Bash durch die Aufnahmesteuerung geben, aber das würdest du ja dann merken.

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Verfasst: 16 Mai 2016, 10:35
von Hospes
Ja, das geht auch. Bloß dann habe ich das Problem wieder anders herum, wenn sich irgendwo im Text ein Apostroph befindet. Beides Apostroph und Anführungszeichen kommen immer wieder – auch gemischt – vor und da beißt sich die Katze in den Schwanz.
Es ist auch nicht möglich den Text mit einem ganz anderen Zeichen zu umgeben, da in Bash nur diese beiden Zeichen als String-Begrenzer erlaubt sind.

Anscheinend komme ich hier gar nicht drum herum, mindestens eines der beiden Zeichen zu maskieren. Nur Wie?

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Verfasst: 16 Mai 2016, 10:56
von ds10
Es gibt die Funktionen clean und clean_less, die müssten eigentlich Anführungszeichen rausfiltern.

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Verfasst: 16 Mai 2016, 17:00
von Hospes
Ja, aber dann wären wirklich alle "\W" (-> regexp class) entfernt. Für z.B. {description} wäre das mal so richtig unleserlich. Da wäre ich dann doch besser mit {urlencode} und Script-{urldecode} bedient, weil ich da "nur" ggf. das "+" verlieren würde.
Ich weiß nicht, wie {urlencode} gebaut ist, aber falls es eine programmierte Funktion ist, müsste man doch eine simple Ausnahme für den "%20"-Fall einbauen können (also keine Umwandlung in "+") – evtl. auch über einen optionalen Schalter. Schließlich ist dies ja auch bei jeder echten URL/URN zulässig. Das wäre eine gute Lösung.
Dies wäre außerdem auch unter Windows die einzige Möglichkeit, Text mit Zeilenumbruch ohne Probleme zu übergeben.

Inzwischen habe ich alle möglichen Kombinationen aus Apostroph und Anführungszeichen versucht, aber auch das bringt leider keine Lösung.

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Verfasst: 16 Mai 2016, 17:37
von ds10
TV-Browser verwendet die Java-Funktion für urlencode. Anführungszeichen sind generell problematisch, da die Aufnahmesteuerung diese ja auch benutzt. Aber das Apostroph lässt sich sicher aus den Text mit replace ersetzten, z.B. {replace(title,"'::##")} auf diese Weise ist man sicher, dass sämtliche Apostroph mit ## ersetzt werden und das dürfte natürlicherweise in keinem Text vorkommen, und man sollte es zurück rechnen können. Bleibt höchstens noch das beschriebene Problem, dass die Aufnahmesteuerung die verbleibenden Anführungszeichen falsch interpretiert, aber dort könntest du ja dann entsprechend mit urlencode arbeiten. Oder du nutzt eine Kombination aus replace und urlencode um das + mit Rauten zu ersetzen.

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Verfasst: 16 Mai 2016, 17:45
von Hospes
Ah, das ist eine Super-Idee! :idea:

Ich ersetze einfach diese Zeichen mit den vollbreiten Unicode-Äquivalenten. Dann muss ich diese nicht unbedingt zurück übersetzen. Ich werde das mal ausprobieren.

Bis später.
Wieder da.

Ach, Mist, ich kann die Befehle nicht verschachteln:

Code: Alles auswählen

'{urlencode({replace(description,"+::+")},"utf-8")}'
Mach ich da irgend was falsch?

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Verfasst: 16 Mai 2016, 19:40
von ds10

Code: Alles auswählen

{urlencode(replace(description,"+::+"),"utf-8")}

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Verfasst: 16 Mai 2016, 20:38
von Hospes
Oh … :oops:

Heureka!!! Jetzt habe ich es!!! :idea:

Ich übergebe generell alle Parameter mit Anführungszeichen ("). Das ist einfacher für die weitere Bash-Verarbeitung.
Nur Parameter, welche selbst Anführungszeichen enthalten könnten – wie z.B. {description} oder {short_info} umschließe ich mit Apostroph (') und übergebe sie mit {urlencode}, wie in dem Code-Beispiel mit der "+"- und "'"- Vorab-Umwandlung.
In Bash prüfe ich jetzt, ob ein Apostroph als erstes Zeichen (ggf. auch als Letztes) vorhanden ist und decodiere mit Bash-{urldecode} wieder zurück. Hier muss ich die Anführungszeichen nicht mehr umwandeln, da sie durch die strikteren Apostrophe geschützt sind.
Fertig.

Man, ich hasse diese Winz-Probleme: da hängst du tagelang an so einem dämlichen Problem, weil EIN Zeichen nicht passt.

Hey, RIESIGES DANKE SCHÖN !!! :mrgreen: