Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #4961 > unrolled thread

"Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern

Started byAndreas Borutta <borumat@gmx.de>
First post2025-11-04 00:36 +0100
Last post2025-11-11 10:03 +0000
Articles 20 on this page of 38 — 5 participants

Back to article view | Back to de.comp.lang.php


Contents

  "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 →


#4961 — "Prettify" (Umbrüche, Leerzeichen) vor dem Ausliefern

FromAndreas Borutta <borumat@gmx.de>
Date2025-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]


#4962

FromStefan+Usenet@Froehlich.Priv.at (Stefan Froehlich)
Date2025-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]


#4963

FromAndreas Borutta <borumat@gmx.de>
Date2025-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]


#4964

FromClaus Reibenstein <creibens@gmail.com>
Date2025-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]


#4965

FromStefan+Usenet@Froehlich.Priv.at (Stefan Froehlich)
Date2025-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]


#4966

FromAndreas Borutta <borumat@gmx.de>
Date2025-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]


#4981

FromAndreas Borutta <borumat@gmx.de>
Date2025-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]


#4982

FromAndreas Borutta <borumat@gmx.de>
Date2025-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&nbsp;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]


#4983

FromAndreas Borutta <borumat@gmx.de>
Date2025-11-20 01:16 +0100
Message-ID<19n89ht26go2h.dlg@borumat.de>
In reply to#4982
Andreas Borutta:

> lorem&nbsp;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]


#4984

FromAndreas Borutta <borumat@gmx.de>
Date2025-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]


#4985

FromMarkus Heinz <markus.heinz@uni-dortmund.de>
Date2025-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]


#4986

FromAndreas Borutta <borumat@gmx.de>
Date2025-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]


#4990

FromAndreas Borutta <borumat@gmx.de>
Date2025-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]


#4995

FromAndreas Borutta <borumat@gmx.de>
Date2025-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]


#4996

FromArno Welzel <usenet@arnowelzel.de>
Date2025-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]


#5003

FromAndreas Borutta <borumat@gmx.de>
Date2025-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]


#5004

FromArno Welzel <usenet@arnowelzel.de>
Date2025-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]


#5005

FromAndreas Borutta <borumat@gmx.de>
Date2025-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]


#5006

FromStefan+Usenet@Froehlich.Priv.at (Stefan Froehlich)
Date2025-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]


#5007

FromAndreas Borutta <borumat@gmx.de>
Date2025-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