Hallo, ich habe einige Beiträge aus einer anderen Forensoftware importiert, die Zeilenumbrüche in Überschriften enthalten. Diese werden in der Beitragsvorschau korrekt angezeigt, aber in dem endgültig erstellten Beitrag nicht als Überschriften gerendert. Ich sehe dieses Problem auf meinem gestern aktualisierten Forum und auch hier auf Discourse Meta:
Überschriftentest mit Zeilenumbrüchen
Normaler Absatz.
Überschrift ohne Zeilenumbrüche
Es lässt das <h2> leer und umschließt den Text danach mit <p>:
<h2 dir="ltr">
</h2><p dir="ltr">Überschriftentest mit Zeilenumbrüchen</p>
Ich bin mir zu 99 % sicher, dass dies eine kürzliche Regression ist, da ich während des Migrationsprozesses speziell Überschriften in importierten Beiträgen desselben Benutzers überprüft habe und der Benutzer und ich uns beide daran erinnern, dass sie korrekt gerendert wurden.
2 „Gefällt mir“
sam
(Sam Saffron)
11. April 2023 um 01:16
3
Hmm, könnten diese LTR-Sachen @Osama mit dem CSS-Flipper zusammenhängen, den wir kürzlich hinzugefügt haben?
2 „Gefällt mir“
Osama
12. April 2023 um 01:56
4
Ich glaube nicht, denn das endgültige/gekochte HTML des Beitrags ist falsch und der CSS-Flipper (egal ob der alte oder der neue) ist überhaupt nicht am Kochprozess des Beitrags beteiligt.
^ der Text innerhalb des <p> sollte sich innerhalb des <h2> befinden und es sollte überhaupt kein <p> vorhanden sein (glaube ich).
6 „Gefällt mir“
selase
(Selase Krakani)
8. Mai 2023 um 18:15
5
Dies scheint beim Kochen zu passieren, speziell beim Markdown-Parsing.
sanitized = markdown(working_text, options)
doc = Nokogiri::HTML5.fragment(sanitized)
add_nofollow = !options[:omit_nofollow] && SiteSetting.add_rel_nofollow_to_user_content
add_rel_attributes_to_user_content(doc, add_nofollow)
strip_hidden_unicode_bidirectional_characters(doc)
sanitize_hotlinked_media(doc)
add_mentions(doc, user_id: opts[:user_id]) if SiteSetting.enable_mentions
scrubber = Loofah::Scrubber.new { |node| node.remove if node.name == "script" }
loofah_fragment = Loofah.fragment(doc.to_html)
loofah_fragment.scrub!(scrubber).to_html
Wenn ein Header mit Zeilenumbrüchen an PrettyText.markdown übergeben wird, wird der Inhalt des Headers in einem p-Tag zurückgegeben.
Und dann wird beim Bereinigen der Absatz aus dem Header-Tag extrahiert, was zu Folgendem führt:
Ich vermute, das passiert, weil ein Absatz in einem Header-Tag nicht den Spezifikationen entspricht?
Ich überprüfe immer noch den Markdown-Parser-Code, um herauszufinden, warum der Inhalt überhaupt in einem p-Tag eingeschlossen wird.
2 „Gefällt mir“
sam
(Sam Saffron)
9. Mai 2023 um 00:02
7
Das hat sehr viel mit Folgendem zu tun:
Took a quick look out of curiosity. It looks like an issue with the Nokogiri library.
[image]
From what uses Discourse here:
Loofah.fragment uses Nokogiri’s HTML4 parser.
This could be fixed using Loofah.html5_fragment as long as Nokogiri >= 1.14.0 and Loofah >= 2.21.0. Discourse already uses Nokogiri::HTML5.fragment; that would make sense.
Note: Loofah 2.21.0 is not yet released; currently in RC1.
Ich kann gerne ein paar Wochen auf die Veröffentlichung von Loofah warten.
Ich werde Mike auf Twitter anschreiben, um ihn auf dieses Problem aufmerksam zu machen.
2 „Gefällt mir“
Hallo, danke, dass Sie sich das angesehen haben. HTML kümmert sich nicht um Zeilenumbrüche, daher ist dies technisch korrekt:
<h2>
Heading test with line breaks
</h2>
Es scheint einfach ein Problem mit dem Markdown-Parser zu sein, der nach/innerhalb des HTML-Parsers läuft und p-Tags für die Zeilenumbrüche generiert.
1 „Gefällt mir“
nat
(Natalie T)
20. Juni 2023 um 12:40
11
Hallo, wir haben das mit
main ← loofah
opened 02:35AM - 12 May 23 UTC
https://meta.discourse.org/t/markdown-preview-and-result-differ/263878
The re… sult of this markdown had different results in the composer preview and the post. This is solved by updating Loofah to the latest version and using html5 fragments like our user had reported. While the change was only needed in [cooked_post_processor.rb](https://github.com/discourse/discourse/pull/21500/files#diff-67de7f44aa04f02ceba9770e5d83b4465add3bd4297be871f94a2233cd4831a7), I've updated the other areas of our codebase to also use the html5 fragment.
> <strike>
>
> Additionally, how come
>
> ```qml
> import QtQuick
> import QtQuick.Controls 2.15 as QQC2
> import QtQuick.Layouts
> import QtPositioning
> ```
>
> and prepension of `QQC2` before `Action`, `Button`, `ApplicationWindow`, and `Frame` doesn't work, whereas
>
> ```qml
> import QtQuick
> import QtQuick.Controls
> import QtQuick.Layouts
> import QtPositioning
> import QtQuick.Controls 2.15 as QQC2
> ```
>
> and addition of `QQC2.Button` (per https://discuss.kde.org/t/qml-pyqt6-cant-get-native-control-appearance/1240/2?u=rokejulianlockhart) does?
>
> </strike>
<img width="643" alt="Screenshot 2023-05-11 at 3 15 36 PM" src="https://github.com/discourse/discourse/assets/1555215/e7087502-b0a1-4219-be0b-ad3904cc6a6f">
Related:
- ~~https://github.com/discourse/discourse/pull/21500~~
- https://github.com/discourse/discourse-footnote/pull/62
- https://github.com/discourse/discourse-bbcode/pull/50
behoben, wie hier zu sehen ist:
Überschriftentest mit Zeilenumbrüchen
Normaler Absatz.
##Überschrift ohne Zeilenumbrüche##
8 „Gefällt mir“
Schön zu hören, danke @nat ! Erfordert dies ein erneutes Backen von Beiträgen?
2 „Gefällt mir“
nat
(Natalie T)
20. Juni 2023 um 13:21
13
Ja, das erfordert ein erneutes Backen – wir können das mit dieser Korrektur nicht automatisch für Sie tun, da dies ein aufwendiger Vorgang ist.
3 „Gefällt mir“
nat
(Natalie T)
Geschlossen,
22. Juni 2023 um 12:40
14
Dieses Thema wurde nach 2 Tagen automatisch geschlossen. Neue Antworten sind nicht mehr möglich.