Perl xhtml im Content eines JSON POST Requests maskieren

echoDave

Commander
Dabei seit
Okt. 2010
Beiträge
2.199
Hallo zusammen,

ich versuche grad per Perl Confluence Seiten zu generieren und diese anschließend per Confluence REST API in mein Confluence zu importieren.
Ich habe mir von einer Vorlageseite in Confluence das xhtml kopiert und in eine lokalen Datei gespeichert. Dieses wird nun von meinem Perlscript mit Leben befüllt.

Das alles klappt soweit wunderbar. Aber nun scheitere ich etwas am Import per REST API.

Der JSON Datapart des hierzu erforderlichen POST-Requests hat folgendes Schema:


-d '{"type":"page","title":"new page",
"space":{"key":"TST"},"body":{"storage":{"value":"hier kommt mein xhtml","representation":
"storage"}}}'


Nun für den Tag "value" setze ich als Inhalt meine generierte xhtml-Datei (welche ich bereits in eine Variable eingelesen habe).
Wie zu erwarten schmiert das aber ab aufgrund der special characters im xhtml.
Also sowas wie ctrl-char, new line, tab, double quotes usw.
Nun kann ich mich hinsetzen und jeden in Frage kommenden special character zu replacen/maskieren (wobei ich auch auch hier ein Auflistung bräuchte welche es überhaupt gibt).
Ich bin aber davon überzeugt, es gibt eine elegantere Methode.
Und das ist auch der Grund weshalb ich hier schreibe, kennt jemand von euch eine schöne/saubere Methode um den Content Part eines Post Request, der ein JSON ist vernünftig zu maskieren?

Ahja der Request wird mittels HTTP::Request durchgeführt.


Vielen Dank schon mal udn viele Grüße,
David
 

ayngush

Lt. Commander
Dabei seit
Okt. 2007
Beiträge
1.571
Habe zwar schon seit ca. 2 Dekaden nichts mehr mit Perl gemacht aber... encode_json gibt es wohl auch in Perl.

Ansonsten frisch von anderen Seiten geklaut:
  • Backspace is replaced with \b
  • Form feed is replaced with \f
  • Newline is replaced with \n
  • Carriage return is replaced with \r
  • Tab is replaced with \t
  • Double quote is replaced with \"
  • Backslash is replaced with \\
und alle Sonderzeichen / Umlaute etc. werden durch \uXXXX ersetzt, wobei XXX der Unicode16-Code ist. Viel Spaß beim selber bauen. Würde dafür auf jedenfall eine Funktion oder Bibliothek der Programmiersprache nutzen.

Und die RFC ist gar nicht so lang, sollte man sich mal durchlesen: https://www.rfc-editor.org/rfc/rfc4627.txt

Grüße
 

echoDave

Commander
Ersteller dieses Themas
Dabei seit
Okt. 2010
Beiträge
2.199
Hi zusammen,

quotemeta so ist lala der knallt einfach vor alles was kein A-Z0-9 ist ein Backslash davor soweit ich es getestet habe.
Der Ansatz von ayngush hat geholfen :-) Danke.
Habe einfach den JSON als JSON Notation in Perl geschrieben (nicht als String) und anschließend encoded.
Das hat wunderbar funktioniert.

Vielen Dank :-)
 
Top