Aufnahmesteuerung – Parameter: Quotes entfernen/umwandeln?

Antworten
Benutzeravatar
Hospes
Senior Member
Beiträge: 136
Registriert: 21 Dez 2009, 19:07

Aufnahmesteuerung – Parameter: Quotes entfernen/umwandeln?

Beitrag 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
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Beitrag 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.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Benutzeravatar
Hospes
Senior Member
Beiträge: 136
Registriert: 21 Dez 2009, 19:07

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Beitrag 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?
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Beitrag von ds10 »

Es gibt die Funktionen clean und clean_less, die müssten eigentlich Anführungszeichen rausfiltern.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Benutzeravatar
Hospes
Senior Member
Beiträge: 136
Registriert: 21 Dez 2009, 19:07

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Beitrag 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.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Beitrag 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.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Benutzeravatar
Hospes
Senior Member
Beiträge: 136
Registriert: 21 Dez 2009, 19:07

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Beitrag 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?
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Beitrag von ds10 »

Code: Alles auswählen

{urlencode(replace(description,"+::+"),"utf-8")}
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Benutzeravatar
Hospes
Senior Member
Beiträge: 136
Registriert: 21 Dez 2009, 19:07

Re: Aufnahmesteuerung – Parameter: Quotes entfernen/umwandel

Beitrag 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:
Antworten