Die echten "Rohdaten" abrufen, die einen Beitrag erstellt haben?

Wenn ich HTML in ein Thema einfüge, um ein Thema zu erstellen, formatiert Discourse das HTML automatisch neu (es „verarbeitet

3 „Gefällt mir“

Klar, es gibt eine Route, um den rohen Beitragsinhalt einzusehen. Nimm deinen Beitrag als Beispiel. Die URL lautet

https://meta.discourse.org/t/get-back-the-real-raw-data-that-created-a-post/189183

Um den rohen Inhalt einzusehen, ersetze /t/slug durch /raw.

https://meta.discourse.org/raw/189183
7 „Gefällt mir“

Danke, aber das scheint bei mir nicht zu funktionieren. Ich möchte Daten erhalten, die das exakte HTML beibehalten, wie es ursprünglich eingefügt wurde – wenn das ursprüngliche HTML also beispielsweise ein div-Tag enthielt, soll das zurückgegebene Datenobjekt dieses div-Tag ebenfalls enthalten.

Was ich beispielsweise in der „raw“-Antwort gefunden habe, enthält Markdown-Formatierung, obwohl die Originaldaten keine enthielten.

Ich werde versuchen, jetzt ein Beispiel zusammenzustellen, um zu verdeutlichen, was ich meine.

1 „Gefällt mir“

Ok. Here’s my attempt at an example:

I wrote a few lines of different formatting in a word processor, and the html produced was:


Original HTML:

<style>
     ...
     /* Style Definitions */
     table.MsoNormalTable
    	{mso-style-name:"Table Normal";
    	mso-tstyle-rowband-size:0;
    	mso-tstyle-colband-size:0;
    	mso-style-noshow:yes;
    	mso-style-priority:99;
    	mso-style-parent:"";
    	mso-padding-alt:0in 5.4pt 0in 5.4pt;
    	mso-para-margin:0in;
    	mso-pagination:widow-orphan;
    	font-size:12.0pt;
    	font-family:"Calibri",sans-serif;
    	mso-ascii-font-family:Calibri;
    	mso-ascii-theme-font:minor-latin;
    	mso-hansi-font-family:Calibri;
    	mso-hansi-theme-font:minor-latin;
    	mso-bidi-font-family:"Times New Roman";
    	mso-bidi-theme-font:minor-bidi;}
    </style>
    <![endif]-->
    </head>

    <body lang=EN-US style='tab-interval:.5in;word-wrap:break-word'>
    <!--StartFragment-->

    <p class=MsoNormal>Here is some text. Font family = Calibri, size 12pt<o:p></o:p></p>

    <p class=MsoNormal><o:p>&nbsp;</o:p></p>

    <p class=MsoNormal><b>This text is bold</b>.<o:p></o:p></p>

    <p class=MsoNormal><o:p>&nbsp;</o:p></p>

    <p class=MsoNormal><i>This text is italicized</i>.<o:p></o:p></p>

    <p class=MsoNormal><o:p>&nbsp;</o:p></p>

    <p class=MsoNormal><span style='font-size:18.0pt'>This text is in a larger font
    = Calibri, size 18</span>.<o:p></o:p></p>

    <p class=MsoNormal><o:p>&nbsp;</o:p></p>

    <p class=MsoNormal align=center style='text-align:center'><span
    style='font-size:11.0pt;font-family:"Garamond",serif'>And here is some more random
    text that is centered = Garamond, size 11. Lorem ipsum dolor sit amet,
    consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
    dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
    laboris nisi ut aliquip ex ea commodo consequat.<o:p></o:p></span></p>

    <!--EndFragment-->
    </body>

    </html>

Cooked Discourse Post:

If I paste this html into a discourse post, it looks like this (after it goes through the “cook” process):

Here is some text. Font family = Calibri, size 12pt

 

This text is bold.

 

This text is italicized.

 

This text is in a larger font = Calibri, size 18.

 

And here is some more random text that is centered = Garamond, size 11. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.


What I’m Trying to Get Back

It’s fine for Discourse to cook the post and display it like it does. But what I want now is to be able to later take a post and get back the original, underlying HTML. So the data I get back should look like this:

<body lang=EN-US style='tab-interval:.5in;word-wrap:break-word'>
<!--StartFragment-->

<p class=MsoNormal>Here is some text. Font family = Calibri, size 12pt<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><b>This text is bold</b>.<o:p></o:p></p>

(etc.)

Right now if I plug in the “raw” endpoint like you provided, it does not provide this html. Rather, it just provides the text with, it seems, most formatting and spacing removed.

Is it possible to get the original, underlying html back?

Ich verstehe also immer noch nicht, oder ich habe einen Schritt übersehen. Ich habe gerade einen Beitrag auf try.discourse.org erstellt: https://try.discourse.org/t/testing-html-cooking/1405. Der Rohinhalt ist https://try.discourse.org/raw/1405. Der Rohinhalt sieht definitiv so aus, wie Sie sagten, dass er aussehen sollte.

Könnten Sie mir Schritt für Schritt erklären, wie ich das reproduzieren kann? Ich habe das oben von Ihnen geteilte „Original-HTML

1 „Gefällt mir“

Du hast recht. Der Rohlink sieht tatsächlich so aus, wie ich es meinte. Ich bin mir nicht sicher, warum das vorher nicht funktioniert hat. Ich werde ein paar Dinge testen und mich dann melden.

1 „Gefällt mir“

Ich denke, das Problem besteht darin, dass der HTML-Code, den Sie möchten, beim Einfügen in den Browser bereits umgewandelt wird, sodass dieser Inhalt niemals bei raw ankommt.

Inhalte aus Ihrem Fragment, die im Raw-Modus sichtbar sind

Siehe https://meta.discourse.org/raw/189183/7

Hier ist ein Text. Schriftart = Calibri, Größe 12pt

 

Dieser Text ist fett.

Wenn Sie den Inhalt jedoch aus Word kopieren und dann einfügen, wird der gesamte HTML-Code auf der Frontend-Seite in Markdown umgewandelt.

1 „Gefällt mir“

Danke an alle. Ja, @pfaffman, das ist zumindest teilweise der Grund für meine Verwirrung hier.

Nehmen wir an, das Ziel ist es, aus Word zu kopieren und dann in ein Discourse-Thema einzufügen; und später die „rohen

Nein. Du kannst im Editor nachschauen und den rohen Text sehen, der erstellt wird, wenn du aus Word einfügst. Das ist alles, denn die Magie, die das Einfügen aus der Zwischenablage in Markdown verwandelt, findet im Browser statt – zwischen dem Einfügen und dem Anzeigen im Editorfenster.

3 „Gefällt mir“

Hier liegt ein entscheidendes Missverständnis vor: Der Rohinhalt ist Markdown, kein HTML.

Wir verfügen über magische :sparkles: Funktionen, die beim Einfügen in den Composer HTML in Markdown umwandeln.

4 „Gefällt mir“

Und was es noch verwirrender macht, ist, dass das Markdown HTML enthalten kann. :man_shrugging:

3 „Gefällt mir“

Diese Umwandlung findet jedoch (im Editor) nicht statt, wenn du tatsächlichen HTML-Code einfügst. Das ist es, was ich früher übersehen habe.

Oder vielleicht, wie @pfaffman sagte, findet die Umwandlung tatsächlich immer statt, aber Markdown kann HTML behalten, wenn es als roher Code eingefügt wird, nicht jedoch, wenn die Ausgabe des Codes eingefügt wird.

Richtig, damit es funktioniert, muss die Zwischenablage einen Inhaltstyp von text/html haben.

2 „Gefällt mir“

Können auch andere Formate wie RTF (Rich Text Format) im Markdown wie HTML erhalten bleiben?

HTML wird im Markdown nicht per se erhalten, sondern es werden lediglich einige wichtige Tags unterstützt (z. B. <em> Hervorhebung), da wir das Postel-Gesetz befolgen, wo dies keine Probleme verursacht.

Welches Problem versuchst du zu lösen?

Das Ziel ist es, zu verstehen, wie der Prozess funktioniert (relevant für einige Projekte). Dieses Gespräch hat bereits dabei geholfen. Ich frage mich immer noch, ob Sie beim Kopieren aus Microsoft Word Zugriff auf den ursprünglich formatierten Text haben.

Nein. Du müsstest dich in den JavaScript-Code einarbeiten, der dies beim Einfügen verarbeitet.

1 „Gefällt mir“

Dies liegt an der Behandlung von „HTML zu Markdown

2 „Gefällt mir“

Das ist sehr hilfreich. Nur zur Klärung: Warum sollte die Bearbeitung durch den Editor Notepad einen Unterschied machen?

Dadurch würden alle Word-Formatierungen entfernt und nur reiner Text übrig bleiben.

Dies liegt daran, dass eine Anwendung beim „Kopieren