Verhindern, dass HTML Tidy Meta-Tags durcheinander bringt (Schema-Markup)

Lesezeit: 8 Minuten

Ich habe ein ernsthaftes Problem mit HTML Tidy (neueste Version — https://html-tidy.org).

Kurz gesagt: HTML wandelt diese Zeilen von HTML-Codes ordentlich um

<div class="breadcrumbs" typeof="BreadcrumbList" vocab="http://schema.org/">
<div class="wrap">
    <span property="itemListElement" typeof="ListItem">
        <a property="item" typeof="WebPage" title="Codes Category" href="https://mysite.works/codes/" class="taxonomy category">
            <span property="name">Codes</span>
        </a>
        <meta property="position" content="1">
    </span>
</div>

In diese Codezeilen — Bitte werfen Sie einen genauen Blick auf die Platzierung von META TAGS.

<div class="breadcrumbs" typeof="BreadcrumbList" vocab="http://schema.org/">
<div class="wrap">
    <span property="itemListElement" typeof="ListItem">
        <a property="item" typeof="WebPage" title="Codes Category" href="https://mysite.works/codes/" class="taxonomy category">
            <span property="name">Codes</span>
        </a>
    </span>
    <meta property="position" content="1">
</div>

Dies verursacht einige ernsthafte Probleme mit Schemavalidierungen. Sie können die Codes hier überprüfen: https://search.google.com/structured-data/testing-tool/u/0/

Aufgrund dieses Problems wird die (URL: https://techswami.in ) Breadcrumb-Navigation ist in den Suchergebnissen nicht sichtbar.

Was verschönere ich?

Mein Kunde wollte, dass ich den Quellcode seiner/ihrer Website “sauber, lesbar und aufgeräumt” mache.

Also verwende ich diese Codezeilen, damit es für ihn/sie funktioniert.

Hinweis: Dieser Code funktioniert zu 100 % perfekt mit dem folgenden WordPress-Setup.

  • Nginx mit FastCGI-Cache/MariaDB
  • PHP7
  • Ubuntu 18.04.1
  • Neuestes WordPress und mit jedem Cache-Plugin kompatibel.

Code:

if( !is_user_logged_in() || !is_admin() ) {
function callback($buffer) {
    $tidy = new Tidy();
    $options = array('indent' => true, 'markup' => true, 'indent-spaces' => 2, 'tab-size' => 8, 'wrap' => 180, 'wrap-sections' => true, 'output-html' => true, 'hide-comments' => true, 'tidy-mark' => false);
    $tidy->parseString("$buffer", $options);
    $tidy->cleanRepair();
    $buffer = $tidy;
    return $buffer;
}
function buffer_start() { ob_start("callback"); }
function buffer_end() { if (ob_get_length()) ob_end_flush(); }
add_action('wp_loaded', 'buffer_start');
add_action('shutdown', 'buffer_end');

}

Welche Hilfe brauche ich von euch?

Können Sie mir bitte sagen, wie ich verhindere, dass HTML Tidy die META TAGS durcheinander bringt. Ich brauche die Parameter.

Vielen Dank.

  • Haben Sie einen anderen HTML-Ordnungsansatz ausprobiert? Beim Betrachten von tidy-html5 auf github … gab es ein Problem, das dem, was Sie hier beschreiben, sehr ähnlich war und für diese Anwendung gelöst wurde – github.com/htacg/tidy-html5/issues/333

    – UndW99

    23. August 2018 um 14:01 Uhr


  • Sagen Sie Ihrem Kunden, dass es nicht möglich ist, dass seine Website aus dynamischen Komponenten besteht, die nicht miteinander kommunizieren, sodass jede Komponente nicht weiß, wie sie ihr eigenes Ausgabeformat ändern muss. Das Beste, was Sie tun können, ist sicherzustellen, dass der von Ihnen erstellte PHP-Code sauber und ordentlich ist. Informieren Sie dann Ihren ungebildeten Kunden, dass die Quellausgabe nicht der Quellcode der Website ist, sondern der generierte Code für den Webbrowser.

    – Barkermn01

    24. August 2018 um 12:16 Uhr


  • @MartinBarker Ich denke, Sie sollten meine Frage noch einmal lesen, ich sage, ich kann den Code verschönern, ich habe nur ein einziges Problem mit -Tags innerhalb von -Tags. Kommen wir zu Ihrem zweiten Punkt: Wenn Sie den Quellcode anzeigen, handelt es sich tatsächlich um den Code der “aktuellen” Webseite, Anwendung. Ich weiß, dass es für Webbrowser generiert wurde, und sogar mein Client weiß es. Danke für deinen nicht so hilfreichen Kommentar.

    – Johannes Adam

    24. August 2018 um 13:18 Uhr

  • Ich habe es gelesen und mein Hauptpunkt ist, aufzuhören, mit dem generierten Quellcode herumzuspielen, denn obwohl die Validatoren es korrekt melden, weil sie experimentell sind und daher nicht vertrauenswürdig sind, ist dieses Meta-Tag nicht gültig w3schools.com/tags/tag_meta.asp -Eigenschaft auf einem Meta-Tag oder in der globalen Attributliste nicht gültig ist, sollte Meta nicht außerhalb des Kopfes erscheinen, also fragt Ihr Kunde nicht nur nach dem Unmöglichen, sondern ist auch nicht in der Lage, Standards für das zu lesen, was Sie verwenden …

    – Barkermn01

    24. August 2018 um 13:53 Uhr


Das <meta> -Tag sollte nur in den übergeordneten Elementen verwendet werden: <head>, <meta charset>, <meta http-equiv>
Außerdem gibt es keine property Attribut in der <meta> Element.

Dies sind höchstwahrscheinlich die Gründe dafür HTML-Aufgeräumt reinigt das Markup.

Quellen

  • Hallo, 1. Der obige HTML-Code ist nicht statisch, er wird von einem Plug-in namens „Breadcrumb NavXT“ generiert und zweitens ist der oben bereitgestellte Code (1.) gemäß Googles Schema-Markup-Testtool und dem w3c-Validator zu 100 % gültig.

    – Johannes Adam

    24. August 2018 um 9:23 Uhr


Benutzer-Avatar
Johannes Adam

Zunächst einmal meinen aufrichtigen Dank an alle, die versucht haben, mir zu helfen.

Ich habe die Lösung gefunden, das einzige Problem mit meiner Lösung ist, dass sie das HTML-Tidy-Problem nicht behebt.

Anstatt HTML-Tody zu verwenden, verwende ich jetzt Folgendes: https://github.com/ivanweiler/beautify-html/blob/master/beautify-html.php

Mein neuer Code lautet:

if( !is_user_logged_in() || !is_admin() ) {
    function callback($buffer) {
        $html = $buffer;
        $beautify = new Beautify_Html(array(
          'indent_inner_html' => false,
          'indent_char' => " ",
          'indent_size' => 2,
          'wrap_line_length' => 32786,
          'unformatted' => ['code', 'pre'],
          'preserve_newlines' => false,
          'max_preserve_newlines' => 32786,
          'indent_scripts'  => 'normal' // keep|separate|normal
        ));

        $buffer = $beautify->beautify($html);
        return $buffer;
    }
    function buffer_start() { ob_start("callback"); }
    function buffer_end() { if (ob_get_length()) ob_end_flush(); }
    add_action('wp_loaded', 'buffer_start');
    add_action('shutdown', 'buffer_end');
}

Und jetzt wurde jedes Problem im Zusammenhang mit Schema-Markup behoben und die Website des Kunden hat den Quellcode verschönert.

  • und Ihre Seitenleistung ohne triftigen Grund zerstören, bedeutet dies auch, dass Ihr Ausgabe-HTML aufgrund der Meta-Tags, die von dem Plugin verwendet werden, das ungültige HTML-Inhalte erzeugt, ungültig ist <meta property überhaupt und <meta innerhalb der <body> Schild!!! Alles, was Sie tun müssen, ist, Ihren Code zu verteilen. nicht in irgendeiner Weise validieren.

    – Barkermn01

    3. September 2018 um 18:53 Uhr


  • @MartinBarker Site hat gültigen Code generiert, tatsächlich verwendet mein Client mein benutzerdefiniertes Design. Dann wollte sie, dass ich “HTML-Tidy” verwende, um den Code zu verschönern. Jetzt hat HTML-Tidy das Schema-Markup durcheinandergebracht. Also fing ich an, nach Alternativen zu suchen, als ich sogar die Antwort auf dem offiziellen Repo anforderte, aber keine Antwort. Der PHP-Code, den ich dieses Mal verwende, verschönert nur den Code und bringt das Schema nicht durcheinander – genau das, was ich brauche. Nun, was die Leistung betrifft, das ist Sache des Kunden. Sie hat mich für die Arbeit bezahlt, und ich muss sie abliefern. Hoffe du verstehst das. Mit freundlichen Grüßen.

    – Johannes Adam

    5. September 2018 um 7:08 Uhr

  • Nein, Ihr Prüfer meldet es fälschlicherweise als gültig. Lesen Sie hier die einfache Version der Spezifikationen. w3schools.com/tags/tag_meta.asp oder die ausführlicheren Details unter developer.mozilla.org/en-US/docs/Web/HTML/Element/meta und durchsuchen Sie diese Seite und Sie werden das Attribut finden property IST NICHT GÜLTIG (es ist nicht einmal auf der Seite, suchen Sie die Seite nach dem Wort „Eigenschaft“ und Sie werden keine finden), dies beweist, dass Ihre Prüfer nicht zu 100 % gemäß den Spezifikationen arbeiten.

    – Barkermn01

    11. September 2018 um 9:40 Uhr


Nur aus Gründen der Perspektive habe ich versucht, ein minimales eigenständiges Beispiel zu implementieren, das auf Folgendem basiert:

Ich landete mit dem folgenden Code:

<?php
ob_start();
?>

<div class="breadcrumbs" typeof="BreadcrumbList" vocab="http://schema.org/">
    <div class="wrap">
        <span property="itemListElement" typeof="ListItem">
            <a property="item" typeof="WebPage" title="Codes Category" href="https://mysite.works/codes/" class="taxonomy category">
                <span property="name">Codes</span>
            </a>
            <meta property="position" content="1">
        </span>
    </div>
</div>

<?php

$buffer = ob_get_clean();
$tidy = new Tidy();
$options = array(
    'indent' => true,
    'markup' => true,
    'indent-spaces' => 2,
    'tab-size' => 8,
    'wrap' => 180,
    'wrap-sections' => true,
    'output-html' => true,
    'hide-comments' => true,
    'tidy-mark' => false
);
$tidy->parseString("$buffer", $options);
$tidy->cleanRepair();

echo $tidy;
?>

Die Ausgabe ist ziemlich informativ darüber, wie Tidy Ihr HTML umstrukturiert. Hier kommt’s:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
    <meta property="position" content="1">
    <title></title>
  </head>
  <body>
    <div class="breadcrumbs" typeof="BreadcrumbList" vocab="http://schema.org/">
      <div class="wrap">
        <span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Codes Category" href="https://mysite.works/codes/" class=
        "taxonomy category"><span property="name">Codes</span></a> </span>
      </div>
    </div>
  </body>
</html>

Das Meta-Tag ist nicht verschwunden, sondern wurde nach oben verschoben, wo es hingehört, wie andere Kommentatoren betonten.

Wenn Sie möchten, dass Tidy nur die HTML-Struktur verarbeitet, fügen Sie bitte die Option „input-xml“ hinzu und setzen Sie sie wie folgt auf „true“:

$options = array(
    'indent' => true,
    'markup' => true,
    'indent-spaces' => 2,
    'tab-size' => 8,
    'wrap' => 180,
    'wrap-sections' => true,
    'output-html' => true,
    'hide-comments' => true,
    'tidy-mark' => false,
    'input-xml' => true
);

Dies wird Folgendes ausgeben:

<div class="breadcrumbs" typeof="BreadcrumbList" vocab="http://schema.org/">
  <div class="wrap">
    <span property="itemListElement" typeof="ListItem">
      <a property="item" typeof="WebPage" title="Codes Category" href="https://mysite.works/codes/" class="taxonomy category">
        <span property="name">Codes</span>
      </a>
      <meta property="position" content="1"></meta>
    </span>
  </div>
</div>

  • Übrigens, es ist nicht HTML Tidy, es ist PHP Tidy-Implementierung.

    – rdlopen

    29. August 2018 um 22:08 Uhr

1371710cookie-checkVerhindern, dass HTML Tidy Meta-Tags durcheinander bringt (Schema-Markup)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy