Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.php > #4961 > unrolled thread
| Started by | Andreas Borutta <borumat@gmx.de> |
|---|---|
| First post | 2025-11-04 00:36 +0100 |
| Last post | 2025-11-11 10:03 +0000 |
| Articles | 20 on this page of 38 — 5 participants |
Back to article view | Back to de.comp.lang.php
"Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-04 00:36 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-11-04 07:57 +0000
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-04 09:17 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Claus Reibenstein <creibens@gmail.com> - 2025-11-04 11:33 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-11-04 11:26 +0000
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-04 20:36 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-19 20:17 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-19 21:24 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-20 01:16 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-21 17:59 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Markus Heinz <markus.heinz@uni-dortmund.de> - 2025-11-22 01:12 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-26 14:21 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-27 08:42 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-28 09:35 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Arno Welzel <usenet@arnowelzel.de> - 2025-11-28 10:51 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-12-04 14:21 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Arno Welzel <usenet@arnowelzel.de> - 2025-12-07 15:43 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-12-07 20:09 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-12-07 19:36 +0000
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-12-07 21:55 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-12-08 09:07 +0000
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-12-11 14:07 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-12-11 18:45 +0000
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Arno Welzel <usenet@arnowelzel.de> - 2025-12-15 12:23 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-08 07:20 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-11-08 10:05 +0000
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-08 18:10 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-11-08 19:50 +0000
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Arno Welzel <usenet@arnowelzel.de> - 2025-11-10 01:58 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-10 09:52 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Andreas Borutta <borumat@gmx.de> - 2025-11-10 09:53 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-11-10 09:20 +0000
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Arno Welzel <usenet@arnowelzel.de> - 2025-11-10 11:12 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-11-10 11:09 +0000
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Arno Welzel <usenet@arnowelzel.de> - 2025-11-10 17:51 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-11-11 08:09 +0000
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Arno Welzel <usenet@arnowelzel.de> - 2025-11-11 10:16 +0100
Re: "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2025-11-11 10:03 +0000
Page 1 of 2 [1] 2 Next page →
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-11-04 00:36 +0100 |
| Subject | "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern |
| Message-ID | <1e5jhd9og7z4l.dlg@borumat.de> |
Moin. Vorwiegend aus ästhetischen Gründen mag ich es, wenn HTML-Quellcode aufgeräumt ausgeliefert wird. Und wenn man sich zum Debuggen mal den Seitenquelltext anzeigen lässt, erleichtert sauber formatierter HTML-Code das Auffinden von Problemen. Kann jemand ein Skript für ein "Prettify" empfehlen? Ich nutze aktuell das CMS Kirby und würde es dort gerne anwenden, falls es technisch möglich ist. Programmieren kann ich nicht. Ich wäre also darauf angewiesen, dass etwas Fertiges existiert, was ich nur einbauen muss. Danke. Andreas -- http://fahrradzukunft.de
[toc] | [next] | [standalone]
| From | Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) |
|---|---|
| Date | 2025-11-04 07:57 +0000 |
| Message-ID | <1t6909b12ei32e282n3e8%sfroehli@Froehlich.Priv.at> |
| In reply to | #4961 |
On Tue, 04 Nov 2025 00:36:38 Andreas Borutta wrote: > Vorwiegend aus ästhetischen Gründen mag ich es, wenn > HTML-Quellcode aufgeräumt ausgeliefert wird. > Und wenn man sich zum Debuggen mal den Seitenquelltext anzeigen > lässt, erleichtert sauber formatierter HTML-Code das Auffinden von > Problemen. Das ist zwar heutzutage praktisch irrelevant, weil Browser ohnehin das DOM in passender Formatierung anzeigen, aber dennoch plagt mich die gleiche Obsession. > Kann jemand ein Skript für ein "Prettify" empfehlen? Weshalb "Skript" (sprich, auch: Weshalb dclp)? Ich habe am Ende meiner Programme idR einen Aufruf von tidy(1), das genau diesen Job rasch und zuverlässig leistet. > Programmieren kann ich nicht. Ich wäre also darauf angewiesen, > dass etwas Fertiges existiert, was ich nur einbauen muss. Es ist fertig, und es existiert. Einbauen musst Du es allerdings selber :-) Servus, Stefan -- http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich Offizieller Erstbesucher(TM) von mmeike Stefan - der gieraffigste Knaller seit Ewigkeiten. (Sloganizer)
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-11-04 09:17 +0100 |
| Message-ID | <1f6z9pqbuv8xj$.dlg@borumat.de> |
| In reply to | #4962 |
Stefan Froehlich: > On Tue, 04 Nov 2025 00:36:38 Andreas Borutta wrote: >> Vorwiegend aus ästhetischen Gründen mag ich es, wenn >> HTML-Quellcode aufgeräumt ausgeliefert wird. > >> Und wenn man sich zum Debuggen mal den Seitenquelltext anzeigen >> lässt, erleichtert sauber formatierter HTML-Code das Auffinden von >> Problemen. > > Das ist zwar heutzutage praktisch irrelevant, weil Browser ohnehin > das DOM in passender Formatierung anzeigen, aber dennoch plagt mich > die gleiche Obsession. Ich freue mich, dass ich damit nicht alleine bin : ) >> Kann jemand ein Skript für ein "Prettify" empfehlen? > > Weshalb "Skript" (sprich, auch: Weshalb dclp)? Falls "Skript" hier kein passender Begriff war: wie bezeichnet man es korrekt? > Ich habe am Ende meiner Programme idR einen Aufruf von tidy(1), > das genau diesen Job rasch und zuverlässig leistet. > >> Programmieren kann ich nicht. Ich wäre also darauf angewiesen, >> dass etwas Fertiges existiert, was ich nur einbauen muss. > > Es ist fertig, und es existiert. Einbauen musst Du es allerdings > selber :-) Vielleicht liest hier ja jemand mit, der auch Kirby einsetzt und kann mir einen Hinweis geben, wie man tidy in/für Kirby verwendet. Du hast hinter "tidy" eine Fußnote eingesetzt. Sollte da noch ein Link kommen? : ) Andreas -- http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Claus Reibenstein <creibens@gmail.com> |
|---|---|
| Date | 2025-11-04 11:33 +0100 |
| Message-ID | <mmu348FmbvcU1@mid.individual.net> |
| In reply to | #4963 |
Andreas Borutta wrote on 11/4/25 9:17 AM: > Stefan Froehlich: > >> Ich habe am Ende meiner Programme idR einen Aufruf von tidy(1), > > Du hast hinter "tidy" eine Fußnote eingesetzt. (1) ist keine Fußnote, sondern ein Hinweis auf das zugehörige Kapitel in den Linux-Manualseiten. Andreas ist vermutlich davon ausgegangen, dass du Linux benutzt. Ist wohl nicht der Fall, denn sonst hättest du das erkennen müssen ;-) Gruß Claus
[toc] | [prev] | [next] | [standalone]
| From | Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) |
|---|---|
| Date | 2025-11-04 11:26 +0000 |
| Message-ID | <1t6909e0efi34eabbn3e8%sfroehli@Froehlich.Priv.at> |
| In reply to | #4963 |
On Tue, 04 Nov 2025 09:17:51 Andreas Borutta wrote: > Stefan Froehlich: >> On Tue, 04 Nov 2025 00:36:38 Andreas Borutta wrote: >>> Kann jemand ein Skript für ein "Prettify" empfehlen? >> Weshalb "Skript" (sprich, auch: Weshalb dclp)? > Falls "Skript" hier kein passender Begriff war: wie bezeichnet man > es korrekt? "Programm" würde ich es nennen. Die Implementierung ist ja völlig belanglos. >> [tidy(1)] ist fertig, und es existiert. Einbauen musst Du es >> allerdings selber :-) > Vielleicht liest hier ja jemand mit, der auch Kirby einsetzt und > kann mir einen Hinweis geben, wie man tidy in/für Kirby verwendet. "Kirby" habe ich schon so oft gehört, wie Du offenbar "tidy". Aber gut, immerhin ist es wohl in PHP implementiert, vielleicht wird's ja doch noch on-topic. Kurzes Googeln führt unmittelbar zu <https://getkirby.com/docs/reference/plugins/hooks/page-render-after>, genau dort gehört der Aufruf wohl hin. Aber ich fürchte fast, Du wirst das als Programmieren bezeichnen... > Du hast hinter "tidy" eine Fußnote eingesetzt. > Sollte da noch ein Link kommen? : ) Nein :-) Es gibt natürlich einen: <https://htmltidy.net/>, aber im Grund genommen hilft Dir der so viel oder so wenig wie die mit (1) referenzierte man-Page auch. Servus, Stefan -- http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich Offizieller Erstbesucher(TM) von mmeike Der irrsinnige Mann im Mond braucht Stefan. Warum wohl? (Sloganizer)
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-11-04 20:36 +0100 |
| Message-ID | <tdnp2t2a2dux$.dlg@borumat.de> |
| In reply to | #4965 |
Stefan Froehlich: >>> [tidy(1)] ist fertig, und es existiert. Einbauen musst Du es >>> allerdings selber :-) > >> Vielleicht liest hier ja jemand mit, der auch Kirby einsetzt und >> kann mir einen Hinweis geben, wie man tidy in/für Kirby verwendet. > > "Kirby" habe ich schon so oft gehört, wie Du offenbar "tidy". Aber > gut, immerhin ist es wohl in PHP implementiert, vielleicht wird's ja > doch noch on-topic. > > Kurzes Googeln führt unmittelbar zu > <https://getkirby.com/docs/reference/plugins/hooks/page-render-after>, > genau dort gehört der Aufruf wohl hin. Aber ich fürchte fast, Du > wirst das als Programmieren bezeichnen... Das hilft mir sehr weiter, wenn jemand Kundiges einschätzen kann, dass es ein sinnvoller und erfolgversprechender Weg ist. Danke. Nein, etwas Konfigurieren und dazu auch Code manipulieren ist völlig OK, klar mache ich das. Sonst hätte ich mit Kirby auch gar nicht beginnen dürfen : ) Bisher komme ich ziemlich gut klar. >> Du hast hinter "tidy" eine Fußnote eingesetzt. >> Sollte da noch ein Link kommen? : ) > > Nein :-) > > Es gibt natürlich einen: <https://htmltidy.net/>, aber im Grund > genommen hilft Dir der so viel oder so wenig wie die mit (1) > referenzierte man-Page auch. Ich werde berichten, wenn mir das "page-render-after" gelungen ist. Andreas -- http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-11-19 20:17 +0100 |
| Message-ID | <2gsf4lr3fd6.dlg@borumat.de> |
| In reply to | #4966 |
Andreas Borutta:
>> Es gibt natürlich einen: <https://htmltidy.net/>, aber im Grund
>> genommen hilft Dir der so viel oder so wenig wie die mit (1)
>> referenzierte man-Page auch.
>
> Ich werde berichten, wenn mir das "page-render-after" gelungen ist.
Es ist mir wider Erwarten ; ) gelungen tidy vor dem Ausliefern des
HTML anzuwenden.
Also nochmal danke für deinen Hinweis : )
Mein Test, ob Tidy verfügbar ist:
/tidy-checkup.php:
<?php
if (class_exists('tidy')) {
echo "✓ Tidy ist verfügbar";
} else {
echo "✗ Tidy ist NICHT verfügbar";
}
/site/plugins/html-tidy/index.php
<?php
use Kirby\Cms\App;
use Kirby\Template\Template;
class TidyTemplate extends Template
{
public function render(array $data = []): string
{
$kirby = App::instance();
$html = parent::render($data);
if (
$kirby->option('debug') === true &&
class_exists('tidy')
) {
$config = [
'indent' => true,
'indent-spaces' => 2,
'wrap' => 0,
'output-html' => true,
'omit-optional-tags' => true,
'doctype' => 'html5',
'tidy-mark' => false
];
$tidy = new tidy();
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();
return (string) $tidy;
}
return $html;
}
}
Kirby::plugin('andreas/html-tidy', [
'components' => [
'template' => function (App $kirby, string $name, string
$contentType = null) {
return new TidyTemplate($name, $contentType);
}
]
]);
Unter den enorm vielen Optionen muss ich mir noch das Passende suchen.
https://api.html-tidy.org/tidy/quickref_5.8.0.html
Optionale Anführungszeichen in Attributwerten zu entfernen konnte Tidy
wohl mal, kann es aber jetzt nicht mehr.
Andreas
--
http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-11-19 21:24 +0100 |
| Message-ID | <1g8prwn0jgz5q.dlg@borumat.de> |
| In reply to | #4981 |
Andreas Borutta: > Unter den enorm vielen Optionen muss ich mir noch das Passende suchen. > https://api.html-tidy.org/tidy/quickref_5.8.0.html Ich möchte Entities ersetzen lassen, natürlich ohne die Zeichen, die zur HTML-Syntax gehören, lorem ipsum 'output-encoding' => 'utf8', 'preserve-entities' => 'no', Erwartete Wirkung: lorem[unicodzeichen]ipsum wirkt leider nicht. Kennt ihr dafür einen Weg? Andreas -- http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-11-20 01:16 +0100 |
| Message-ID | <19n89ht26go2h.dlg@borumat.de> |
| In reply to | #4982 |
Andreas Borutta: > lorem ipsum > > 'output-encoding' => 'utf8', > 'preserve-entities' => 'no', > > Erwartete Wirkung: > lorem[unicodzeichen]ipsum > > wirkt leider nicht. 'quote-nbsp' => false, erledigt den Job. Sogar Custom-Elements können behandelt werden. 'custom-tags' => true, Bin happy mit Tidy. Und vielleicht gibt es ja doch noch eine Lösung für das Entfernen der überflüssigen Anführungszeichen in Attributwerten mit irgendeinem anderen Tool. Ingrid -- http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-11-21 17:59 +0100 |
| Message-ID | <1knc9509vz966.dlg@borumat.de> |
| In reply to | #4983 |
Andreas Borutta: > Sogar Custom-Elements können behandelt werden. Leider gibt es ein sehr rätselhaftes Problem mit Custom Tags. Schritte zum Reproduzieren: A Tidy Konfiguration: 'omit-optional-tags' => true, 'custom-tags' => 'blocklevel', 'doctype' => 'html5', Quelltext: <p>Lorem</p> <x-karten> <p>Ipsum</p> </x-karten> Ergebnis im Seitenquelltext (also Output von Tidy): <p>Lorem <x-karten> <p>Ipsum </x-karten> Alles erwartungsgemäß bis hierher. Ergebnis im DOM (Webentwicklertools): <p>Lorem</p> <x-karten></x-karten> <p>Ipsum</p> B Tidy Konfiguration: 'omit-optional-tags' => true, //'custom-tags' => 'blocklevel', 'doctype' => 'html5', Quelltext: <p>Lorem</p> <x-karten> <p>Ipsum</p> </x-karten> Ergebnis im Seitenquelltext (also Output von Tidy): <p>Lorem <x-karten> <p>Ipsum </x-karten> Jetzt der Knaller: Ergebnis im DOM (Webentwicklertools): <p>Lorem</p> <x-karten> <p>Ipsum</p> </x-karten> Ich habe hoch unter runter gesucht und finde keine Ursache. Fällt euch was ein? Andreas -- http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Markus Heinz <markus.heinz@uni-dortmund.de> |
|---|---|
| Date | 2025-11-22 01:12 +0100 |
| Message-ID | <10fqv5p$f5gm$1@solani.org> |
| In reply to | #4984 |
Hallo, Andreas Borutta schrieb um 2025-11-21 17:59:03: > Leider gibt es ein sehr rätselhaftes Problem mit Custom Tags. > > Schritte zum Reproduzieren: > > A > > Tidy Konfiguration: > > 'omit-optional-tags' => true, > 'custom-tags' => 'blocklevel', > 'doctype' => 'html5', > > Quelltext: > > <p>Lorem</p> > <x-karten> > <p>Ipsum</p> > </x-karten> > > Ergebnis im Seitenquelltext (also Output von Tidy): > > <p>Lorem > <x-karten> > <p>Ipsum > </x-karten> > > Alles erwartungsgemäß bis hierher. > > Ergebnis im DOM (Webentwicklertools): > > <p>Lorem</p> > <x-karten></x-karten> > <p>Ipsum</p> > > B > > Tidy Konfiguration: > > 'omit-optional-tags' => true, > //'custom-tags' => 'blocklevel', > 'doctype' => 'html5', > > Quelltext: > > <p>Lorem</p> > <x-karten> > <p>Ipsum</p> > </x-karten> > > Ergebnis im Seitenquelltext (also Output von Tidy): > > <p>Lorem > <x-karten> > <p>Ipsum > </x-karten> > > Jetzt der Knaller: > > Ergebnis im DOM (Webentwicklertools): > > <p>Lorem</p> > <x-karten> > <p>Ipsum</p> > </x-karten> > > Ich habe hoch unter runter gesucht und finde keine Ursache. > > Fällt euch was ein? Ich kenne das Formatierungstool nicht und kann daher nichts zu seiner Konfiguration sagen. Aber: Die Webentwickler-Tools in Browsern wie Firefox oder Chrome / Chromium zeigen meiner Erfahrung nach nicht den Original-Quelltext an, sondern eine Interpretation davon. So werden z.B. alle Tags in dieser Darstellung mit einem schließenden Tag versehen. Was das x-karten Tag betrifft: Was macht dieses in einem HTML Dokument? Wenn man den tatsächlichen Quelltext einer Webseite sehen möchte, sollte man die Browser-Funktion "Seitenquelltext anzeigen" nutzen. Dann bekommt man den Quelltext, wie er vom Server geliefert wird, angezeigt. Hoffe das hilft. Viele Grüße Markus Heinz
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-11-26 14:21 +0100 |
| Message-ID | <1uwpxi1703vv8$.dlg@borumat.de> |
| In reply to | #4985 |
Markus Heinz: > Aber: Die Webentwickler-Tools in Browsern wie Firefox oder Chrome / > Chromium zeigen meiner Erfahrung nach nicht den Original-Quelltext an, > sondern eine Interpretation davon. Genau. Deshalb habe ich das auch extra erwähnt und dokumentiert, was der Parser des Browsers aus dem Quelltext macht (die Webentwicklertools zeigen ja die Ausgabe des Parses). > So werden z.B. alle Tags in dieser > Darstellung mit einem schließenden Tag versehen. Klar. > Was das x-karten Tag betrifft: Was macht dieses in einem HTML Dokument? Nennt man Custom-Elements. Ist ein Merkmal von HTML5. > Wenn man den tatsächlichen Quelltext einer Webseite sehen möchte, > sollte man die Browser-Funktion "Seitenquelltext anzeigen" nutzen. Dann > bekommt man den Quelltext, wie er vom Server geliefert wird, angezeigt. Andreas -- http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-11-27 08:42 +0100 |
| Message-ID | <gpvd1xgxmf3w.dlg@borumat.de> |
| In reply to | #4984 |
Andreas Borutta:
>> Sogar Custom-Elements können behandelt werden.
>
> Leider gibt es ein sehr rätselhaftes Problem mit Custom Tags.
> [...]
Ich konnte das Phänomen endlich aufklären, weil seit gestern auf
meinem eigener Website Tidy 5.6 innerhalb von PHP verfügbar ist und
ich dort ohne Randeffekte testen kann.
Minimales Test-Case: https://borumat.de/-/tidy-test
Das Problem liegt in der Kombination aus weggelassenen End-Tags und
dem Parsing-Verhalten von Custom Elements.
Der HTML-Parser behandelt Custom-Elements als unbekannte
Inline-Elemente.
Ein <p> wird laut Spezifikation implizit geschlossen, wenn ein
Block-Element folgt.
Aber Custom-Elements gelten beim Parsing nicht als Block-Elemente –
sie lösen dieses implizite Schließen nicht aus.
Der Parser interpretiert daher <custom-2> als fehlerhaft und lässt es
weg.
Die eingesetzten Tidy-Optionen:
'omit-optional-tags' => true,
'custom-tags' => 1, //'custom-tags' => 'blocklevel', funktioniert
aufgrund eines Bugs in PHP nicht. Der numerische Wert für 'blocklevel'
dient als Workaround
'output-encoding' => 'utf8',
'doctype' => 'html5',
'tidy-mark' => true,
Fazit: Custom-Elements können in Kombi mit omitted Endtags nicht
eingesetzt werden.
Mist. Nix zu machen.
Andreas
--
http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-11-28 09:35 +0100 |
| Message-ID | <14269q1gcv61z$.dlg@borumat.de> |
| In reply to | #4981 |
Andreas Borutta:
> Andreas Borutta:
>> Stefan Fröhlich:
>>> Es gibt natürlich einen: <https://htmltidy.net/>, aber im Grund
>>> genommen hilft Dir der so viel oder so wenig wie die mit (1)
>>> referenzierte man-Page auch.
>>
>> Ich werde berichten, wenn mir das "page-render-after" gelungen ist.
>
> Es ist mir wider Erwarten ; ) gelungen tidy vor dem Ausliefern des
> HTML anzuwenden.
>
> Also nochmal danke für deinen Hinweis : )
Ich habe das per AI erzeugte Plugin für Kirby in Form von PHP-Code
nochmal ändern lassen.
Mich reizte es, die Optionen in einer separaten Konfigurations-Datei
"tidy.ini" setzen zu können.
/site/plugins/tidy-html/index.php:
<?php
use Kirby\Cms\App;
use Kirby\Template\Template;
class TidyTemplate extends Template
{
public function render(array $data = []): string
{
$kirby = App::instance();
$html = parent::render($data);
if (
$kirby->option('debug') === true &&
class_exists('tidy')
) {
$iniFile = __DIR__ . '/tidy.ini';
$config = is_file($iniFile)
? parse_ini_file($iniFile, false, INI_SCANNER_TYPED)
: [];
$tidy = new tidy();
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();
return (string) $tidy;
}
return $html;
}
}
Kirby::plugin('andreas/html-tidy', [
'components' => [
'template' => function (App $kirby, string $name, string
$contentType = null) {
return new TidyTemplate($name, $contentType);
}
]
]);
/site/plugins/tidy-html/tidy.ini:
tidy-mark = true
break-before-br = true
indent-attributes = true
indent = true
output-html = true
omit-optional-tags = true
output-encoding = utf8
preserve-entities = false
doctype = html5
custom-tags = 1
hide-comments = true
coerce-endtags = false
quote-nbsp = false
wrap = 0
Falls jemand Lust hat, etwas zur Code-Qualität des PHP zu sagen, freue
ich mich.
Ich kann die Qualität nicht beurteilen.
Ich bin immer noch happy über HTML Tidy. Aufgeräumten ausgelieferten
Code hatte ich mir schon lange gewünscht.
Eine Fehlersuche ist beim Lesen des HTML-Codes jetzt viel einfacher.
Offtopic:
Nach einer Kleinigkeit suche ich noch.
Der Browser stellt in seinem Seitenquelltext "Invisibles" wie
* geschützte normalbreite Leerzeichen
* schmale Leerzeichen
* schmale geschützte Leerzeichen
* Tabs
nicht dar.
Falls da jemand eine Erweiterung für Firefox kennt, die Invisibles auf
geeignete Weise sichtbar macht, freue ich mich über einen Hinweis.
Theoretisch müsste sowas mit UserJS gehen oder?
Andreas
--
http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2025-11-28 10:51 +0100 |
| Message-ID | <10gbrbh$29n7o$1@dont-email.me> |
| In reply to | #4995 |
Andreas Borutta, 2025-11-28 09:35:
> Andreas Borutta:
>> Andreas Borutta:
>>> Stefan Fröhlich:
>
>>>> Es gibt natürlich einen: <https://htmltidy.net/>, aber im Grund
>>>> genommen hilft Dir der so viel oder so wenig wie die mit (1)
>>>> referenzierte man-Page auch.
>>>
>>> Ich werde berichten, wenn mir das "page-render-after" gelungen ist.
>>
>> Es ist mir wider Erwarten ; ) gelungen tidy vor dem Ausliefern des
>> HTML anzuwenden.
>>
>> Also nochmal danke für deinen Hinweis : )
>
> Ich habe das per AI erzeugte Plugin für Kirby in Form von PHP-Code
> nochmal ändern lassen.
>
> Mich reizte es, die Optionen in einer separaten Konfigurations-Datei
> "tidy.ini" setzen zu können.
>
> /site/plugins/tidy-html/index.php:
>
> <?php
Hier fehlt die Angabe des Namespace (siehe auch
<https://www.php.net/manual/de/language.namespaces.definition.php>).
> use Kirby\Cms\App;
> use Kirby\Template\Template;
Hier sollte eine Leerzeile sein.
> class TidyTemplate extends Template
> {
> public function render(array $data = []): string
> {
> $kirby = App::instance();
> $html = parent::render($data);
>
> if (
> $kirby->option('debug') === true &&
> class_exists('tidy')
> ) {
Ich nehme an, es ist beabsichtigt, tidy nur zu nutzen, wenn man den
Debug-Modus in Kirby aktiviert?
> $iniFile = __DIR__ . '/tidy.ini';
> $config = is_file($iniFile)
> ? parse_ini_file($iniFile, false, INI_SCANNER_TYPED)
> : [];
parse_ini_file() liefert im Fehlerfall false zurück und kein leeres
Array und parseString() will entweder ein Array, String oder null. Siehe
auch <https://www.php.net/manual/de/tidy.parsestring.php>
Robustere Lösung, um unerwartete Effekte bei Problemen mit der INI-Datei
zu vermeiden:
$config = @parse_ini_file(
$iniFile, false, INI_SCANNER_TYPED
);
if (!$config) {
$config = null;
}
> $tidy = new tidy();
> $tidy->parseString($html, $config, 'utf8');
> $tidy->cleanRepair();
> return (string) $tidy;
Ist das wirklich so vorgesehen? Ich hätte eher sowas erwartet:
return $tidy->html()->value;
--
Arno Welzel
https://arnowelzel.de
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-12-04 14:21 +0100 |
| Message-ID | <re4vzdpu91ji.dlg@borumat.de> |
| In reply to | #4996 |
Arno Welzel:
Erstmal herzlichen Dank! : )
>> Ich habe das per AI erzeugte Plugin für Kirby in Form von PHP-Code
>> nochmal ändern lassen.
>>
>> Mich reizte es, die Optionen in einer separaten Konfigurations-Datei
>> "tidy.ini" setzen zu können.
>>
>> /site/plugins/tidy-html/index.php:
>>
>> <?php
>
> Hier fehlt die Angabe des Namespace (siehe auch
> <https://www.php.net/manual/de/language.namespaces.definition.php>).
Auch die offiziellen Plugins von Kirby haben keinen solchen Eintrag.
>> class TidyTemplate extends Template
>> {
>> public function render(array $data = []): string
>> {
>> $kirby = App::instance();
>> $html = parent::render($data);
>>
>> if (
>> $kirby->option('debug') === true &&
>> class_exists('tidy')
>> ) {
>
> Ich nehme an, es ist beabsichtigt, tidy nur zu nutzen, wenn man den
> Debug-Modus in Kirby aktiviert?
Nein. Das hatte ich übersehen. Den Modus habe ich jetzt deaktiviert
und die Zeile im Plugin entfernt.
>
>> $tidy = new tidy();
>> $tidy->parseString($html, $config, 'utf8');
>> $tidy->cleanRepair();
>> return (string) $tidy;
>
> Ist das wirklich so vorgesehen? Ich hätte eher sowas erwartet:
>
> return $tidy->html()->value;
Ich erhalte dazu:
| Beides funktioniert, aber es gibt Unterschiede:
|
| (string)$tidy - Ruft die __toString() Methode auf, die standardmäßig das vollständige HTML-Dokument zurückgibt
| $tidy->html()->value - Gibt explizit nur den Inhalt des <html>-Tags zurück
|
| Empfehlung: Verwende (string)$tidy, da:
|
| Es idiomatischer für die Tidy-Extension ist
| Du das komplette Dokument inkl. DOCTYPE haben möchtest
| Es kürzer und lesbarer ist
| <?php
| use Kirby\Cms\App;
| use Kirby\Template\Template;
|
| class TidyTemplate extends Template {
| public function render(array $data = []): string {
| $html = parent::render($data);
|
| // Prüfe ob Tidy verfügbar ist
| if (!class_exists('tidy')) {
| return $html;
| }
|
| // Lade Config
| $iniFile = __DIR__ . '/tidy.ini';
| $config = file_exists($iniFile)
| ? parse_ini_file($iniFile, false, INI_SCANNER_TYPED)
| : [];
|
| // Fallback auf Default-Config wenn Parse fehlschlägt
| if ($config === false) {
| $config = [
| 'indent' => true,
| 'wrap' => 0,
| 'output-html' => true,
| ];
| }
|
| try {
| $tidy = new tidy();
| $tidy->parseString($html, $config, 'utf8');
| $tidy->cleanRepair();
|
| // Fehlerbehandlung
| if ($tidy->errorBuffer) {
| // Optional: Logge Tidy-Warnungen
| // error_log('Tidy warnings: ' . $tidy->errorBuffer);
| }
|
| return (string)$tidy;
| } catch (\Exception $e) {
| // Bei Fehler: Original-HTML zurückgeben
| return $html;
| }
| }
| }
|
| Kirby::plugin('andreas/html-tidy', [
| 'components' => [
| 'template' => function (App $kirby, string $name, string $contentType = null) {
| return new TidyTemplate($name, $contentType);
| }
| ]
| ]);
Mich wundert es, dass überhaupt derart länglicher Code für das
Anwenden einer PHP-Erweiterung, die typischerweise auf ein ganzes
Dokument wirken soll, nötig ist.
Andreas
--
http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2025-12-07 15:43 +0100 |
| Message-ID | <10h43qc$3gdng$1@dont-email.me> |
| In reply to | #5003 |
Andreas Borutta, 2025-12-04 14:21: [...] > Mich wundert es, dass überhaupt derart länglicher Code für das > Anwenden einer PHP-Erweiterung, die typischerweise auf ein ganzes > Dokument wirken soll, nötig ist. Du bist halt kein Software-Entwickler ;-) Im Ernst: Einfach ein paar wenige Befehle für irgendwas sind nur dann möglich, wenn jemand die Implementierung für diese Befehle woanders schon erstellt hat und Du sie nur noch benutzen musst. Das ist halt der Unterschied zwischen "ich drücke einen Knopf und es geht" und "ich konstruiere die Maschine, in der ein Knopf ist, wo man dann draufdrücken kann und dann führt die Maschine die gewünschte Aktion aus". -- Arno Welzel https://arnowelzel.de
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-12-07 20:09 +0100 |
| Message-ID | <pdaqork8zz9j.dlg@borumat.de> |
| In reply to | #5004 |
Arno Welzel: > Andreas Borutta, 2025-12-04 14:21: > > [...] >> Mich wundert es, dass überhaupt derart länglicher Code für das >> Anwenden einer PHP-Erweiterung, die typischerweise auf ein ganzes >> Dokument wirken soll, nötig ist. > > Du bist halt kein Software-Entwickler ;-) > > Im Ernst: > > Einfach ein paar wenige Befehle für irgendwas sind nur dann möglich, > wenn jemand die Implementierung für diese Befehle woanders schon > erstellt hat und Du sie nur noch benutzen musst. > > Das ist halt der Unterschied zwischen "ich drücke einen Knopf und es > geht" und "ich konstruiere die Maschine, in der ein Knopf ist, wo man > dann draufdrücken kann und dann führt die Maschine die gewünschte Aktion > aus". Wir reden ja über das Konzept von Erweiterungen. Ich nahm an, dass es für den Standardfall "Erweiterung X anwenden" den fertigen Befehl gibt. Ich rede selbstverständlich nicht allgemein darüber, dass länglicher Code für beliebige Aufgaben verwunderlich ist. Der Zusammenhang, den du nennst, ist mir grundsätzlich klar. Andreas -- http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
| From | Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) |
|---|---|
| Date | 2025-12-07 19:36 +0000 |
| Message-ID | <3t6935d6a3i3ebed8n3e8%sfroehli@Froehlich.Priv.at> |
| In reply to | #5005 |
On Sun, 07 Dec 2025 20:09:34 Andreas Borutta wrote: > Arno Welzel: >> Andreas Borutta, 2025-12-04 14:21: >>> Mich wundert es, dass überhaupt derart länglicher Code für das >>> Anwenden einer PHP-Erweiterung, die typischerweise auf ein >>> ganzes Dokument wirken soll, nötig ist. >> Das ist halt der Unterschied zwischen "ich drücke einen Knopf und >> es geht" und "ich konstruiere die Maschine, in der ein Knopf ist, >> wo man dann draufdrücken kann und dann führt die Maschine die >> gewünschte Aktion aus". > Wir reden ja über das Konzept von Erweiterungen. Ich nahm an, dass es > für den Standardfall "Erweiterung X anwenden" den fertigen Befehl > gibt. Naja, es sind doch eh nur drei Befehle: Daten einlesen, Daten verarbeiten, Daten ausgeben: | $tidy->parseString($html, $config, 'utf8'); | $tidy->cleanRepair(); | return (string) $tidy; Der ganze Rest drumherum ist Initialisierung, Prüfung und Fehlerverarbeitung. Fast alles davon könntest Du theoretisch auch weglassen, aber wenn dann irgendetwas nicht nach Plan läuft, fliegt Dir das Programm um die Ohren - das ist kein Gewinn. Servus, Stefan -- http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich Offizieller Erstbesucher(TM) von mmeike Stefan: ein starker Partner! (Sloganizer)
[toc] | [prev] | [next] | [standalone]
| From | Andreas Borutta <borumat@gmx.de> |
|---|---|
| Date | 2025-12-07 21:55 +0100 |
| Message-ID | <tzd3d720hq1r$.dlg@borumat.de> |
| In reply to | #5006 |
Stefan Froehlich: > On Sun, 07 Dec 2025 20:09:34 Andreas Borutta wrote: >> Arno Welzel: >>> Andreas Borutta, 2025-12-04 14:21: >>>> Mich wundert es, dass überhaupt derart länglicher Code für das >>>> Anwenden einer PHP-Erweiterung, die typischerweise auf ein >>>> ganzes Dokument wirken soll, nötig ist. > >>> Das ist halt der Unterschied zwischen "ich drücke einen Knopf und >>> es geht" und "ich konstruiere die Maschine, in der ein Knopf ist, >>> wo man dann draufdrücken kann und dann führt die Maschine die >>> gewünschte Aktion aus". > >> Wir reden ja über das Konzept von Erweiterungen. Ich nahm an, dass es >> für den Standardfall "Erweiterung X anwenden" den fertigen Befehl >> gibt. > > Naja, es sind doch eh nur drei Befehle: Daten einlesen, Daten > verarbeiten, Daten ausgeben: > >| $tidy->parseString($html, $config, 'utf8'); >| $tidy->cleanRepair(); >| return (string) $tidy; > > Der ganze Rest drumherum ist Initialisierung, Prüfung und > Fehlerverarbeitung. Fast alles davon könntest Du theoretisch auch > weglassen, aber wenn dann irgendetwas nicht nach Plan läuft, fliegt > Dir das Programm um die Ohren - das ist kein Gewinn. Sollte denn die Aufgaben Initialisierung, Prüfung und Fehlerverarbeitung nicht Bestandteil jeder Erweiterung oder des aufrufenden Moduls sein. Mir leuchtet bisher eine Architektur nicht ein, wo der jeder Anwender einer Erweiterung "das Rad neu erfindet" - nur um die Erweiterung aufzurufen. Andreas -- http://fahrradzukunft.de
[toc] | [prev] | [next] | [standalone]
Page 1 of 2 [1] 2 Next page →
Back to top | Article view | de.comp.lang.php
csiph-web