• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Twitter-Button verursacht Fehlermeldungen bei W3C-Validator

Hi,

vom google+ kenne ich das Problem schon und habe es inzwischen akzeptiert.
Wie ist das bei Fehlermeldungen wie diesen, die durch den Code vom Twitter-Button verursacht wurden.

Line 95, Column 61: there is no attribute "data-count"
Code:
[/I]
…"http://twitter.com/share" data-count=[B]"[/B]none" data-related="twitterapi" class="…[I]
Line 95, Column 81
: there is no attribute "data-related"
Code:
…share" data-count="none" data-related=[B]"[/B]twitterapi" class="twitter-share-button…

Line 96, Column 22: required attribute "type" not specified
Code:
<script[B]>[/B]!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0]…

kann man da was machen ohne das der code nicht mehr funktioniert?
 
Werbung:
Ja, du solltest den HTML5-Doctype verwenden. Dann sollte es fehlerfrei durchlaufen.

Alternativ dazu kannst Du diese HTML-Codes auch per JavaScript ausgeben lassen (z.B. mittels document.write()) und diese Abschnitte mit CDATA umgeben - dann ignoriert der Validator diese Quellcodes.
 
Ja, du solltest den HTML5-Doctype verwenden. Dann sollte es fehlerfrei durchlaufen.

Alternativ dazu kannst Du diese HTML-Codes auch per JavaScript ausgeben lassen (z.B. mittels document.write()) und diese Abschnitte mit CDATA umgeben - dann ignoriert der Validator diese Quellcodes.

ist das nicht html5?

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
Werbung:
und html5 ist moderner?

Ja, ist aber im Gegensatz zu XHTML noch kein abgesegneter Standard, auch wenn sich inzwischen alle aktuellen Browserversionen an einem Großteil der Entwürfe orientieren.

Ich dachte immer xhtml ist der neuste Stand.

Falsch gedacht ;)

Wie muss den dann ein doctype in html5 aussehen der auch xhtml abdeckt.

In HTML5 kann man Elemente in XHTML-Schreibweise schreiben, was vor allem bei selbstschließenden Elementen oder Attributen interessant ist. Man kann sie aber auch in HTML-Schreibweise schreiben, also nur ">" am Ende von selbstschließenden Elementen.
 
Werbung:
Ja, ist aber im Gegensatz zu XHTML noch kein abgesegneter Standard, auch wenn sich inzwischen alle aktuellen Browserversionen an einem Großteil der Entwürfe orientieren.

aber beim Validator gäbe es trotzdem keine Fehlermeldungen?
Das ist doch sonst nur bei abgesegneten Befehlen der Fall.

Und wie sieht die richtige deklatration aus?
Reicht
Code:
<!DOCTYPE html>
wirklich aus? Ich habe gerade folgendes gelesen.

Absolut revolutionär ist der <!DOCTYPE html> von HTML5, weil html einfach einfach ist.
Die Dokumenttyp-Deklarationen <!doctype html> dehiniert die HTML
Hypertext-Auszeichnungssprache Auszeichnungssprache zur Strukturierung und semantischen Auszeichnung der Inhalte des Dokuments. Die Angabe einer Dokumenttyp-Deklarationen ist zwingend vorgeschrieben! Gemäß der HTML5 Spezifikation enthält der DOCTYPE keine Versionsangabe mehr und lässt erkennen, dass man sich von einer Versionierung des Standards verabschiedet hat.

Die Schreibweise der Zeichenfolge ist nicht case-sensitiv, sodass diese in Groß- und Kleinschreibung notiert werden kann. Die Angabe einer DTD
Dokumenttypdefinitionen ist gemäß der HTML5 Spezifikation werder vorgesehen noch ist diese notwendig, da HTML5 nicht auf SGML Normierte Verallgemeinerte Auszeichnungssprache basiert.
 
Es scheint als wenn ich dann auf UTF-8 umstellen muss. (und hoffe das ich dann nicht Schwierigkeiten bekomme. Ich erinnere mich das ich aus irgendeinem Grund auf iso-8859-1 gegangen war. Ich glaube das hatte was mit der Datenbank zu tun.)
Doch haben ich nun Probleme

Character Encoding mismatch! The character encoding specified in the HTTP header (iso-8859-1) is different from the value in the <meta> element (utf-8). I will use the value from the HTTP header (iso-8859-1) for this validation.

im Code steht nun

Code:
<!DOCTYPE html>
<?php    // Datenbanklink aus index.php
include("dbconnect.php");
?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 
Werbung:
Dann musst Du auch die Zeichensatzangabe im HTTP-Header anpassen. Dort steht dieser iso-Zeichensatz. Diese Angabe muss bei HTML mit der Charset-Angabe übereinstimmen die Du übrigens auch nicht richtig geschrieben hast (das ist aber nicht die Ursache für diese Meldung). Korrekt wäre diese Angabe:

HTML:
<meta charset="utf-8">

direkt nach <head>.

Vermutlich ist auch die Angabe im HTTP-Header der Grund wieso Du einen veralteten Zeichensatz verwendest ;)
 
Dann musst Du auch die Zeichensatzangabe im HTTP-Header anpassen. Dort steht dieser iso-Zeichensatz. Diese Angabe muss bei HTML mit der Charset-Angabe übereinstimmen die Du übrigens auch nicht richtig geschrieben hast (das ist aber nicht die Ursache für diese Meldung). Korrekt wäre diese Angabe:

HTML:
<meta charset="utf-8">

direkt nach <head>.

Vermutlich ist auch die Angabe im HTTP-Header der Grund wieso Du einen veralteten Zeichensatz verwendest ;)
ich Dachte das ich Utf-8 mit
Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
angegeben habe.
Und wo steht da dann noch iso??
Die alte Angabe mit chartset=iso... habe ich doch gelöscht.
 
Das

HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

ist XHTML-Schreibweise.

Das

HTML:
<meta charset="utf-8">

ist HTML5-Schreibweise.

Den Zeichensatz den ich meinte findest Du nicht in irgendeinem HTML-Code sondern im HTTP-Header. Den kannst Du z.B. mit diesem Tool: HTTP Header Abfrage - Netzwerk, Domain und DNS-Tools - oder auch mit vielen Browsererweiterungen (wie Firebug oder Webdeveloper für Firefox) auslesen. Anpassen kannst Du diesen HTTP-Header per PHP oder Webserver-(meist Apache-)Konfiguration.
 
Werbung:
da der Validator die Seite noch immer nicht als utf-8 erkennt, vermute ich das ich auch folgende Zeile anders schreiben muss.
Code:
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">

Aber ich finde es schon blöd das iso nicht fehlerfrei zu laufen scheint.
Denn nun muss ich wohl alles erst umstellen.



P.S.
was sagt mir diese Info
The border attribute is obsolete. Consider specifying img { border: 0; } in CSS instead.
 
Mit anderen Worten auch wenn in meinem Header der Seite
HTML:
<!DOCTYPE html>
<?php    // Datenbanklink aus index.php
include("dbconnect.php");
?>

<head>

<meta charset="utf-8">

steht dann heißt das noch lange nicht das die Seite auch als utf-8 ausgelesen wird.
Wenn ich richtig verstanden habe muss ich die Server-Einstellungen für meine Seite beim Anbieter verändern.
 
Werbung:
Ja und nein.

Ja zu
steht dann heißt das noch lange nicht das die Seite auch als utf-8 ausgelesen wird.

Nein zu
muss ich die Server-Einstellungen für meine Seite beim Anbieter verändern.
Denn Du musst lediglich den Zeichensatz im HTTP-Header selber setzen. Das geht (wie glaube ich schon gesagt) auf 2 Wegen: per .htaccess-Datei oder per PHP. Stichwort: Content-type.
 
Ja, du solltest den HTML5-Doctype verwenden. Dann sollte es fehlerfrei durchlaufen.

Alternativ dazu kannst Du diese HTML-Codes auch per JavaScript ausgeben lassen (z.B. mittels document.write()) und diese Abschnitte mit CDATA umgeben - dann ignoriert der Validator diese Quellcodes.

Da sich durch das Umstellen auf Utf-8 umfangreiche Fehler eingestellt haben. Und ich sehr viele Seiten ändern müsste. Möchte ich mich einmal mit der zweiten Möglichkeit beschäftigen.
Und so fragen ob ich das so dann richtig umgesetzt habe.

Code:
              <![CDATA[
              document.write("
              <a href="http://twitter.com/share" data-count="none" data-related="twitterapi" class="twitter-share-button" lang="de">Tweet</a>
              <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
              ");
              ]]>
 
Nein, das ergibt einen Fehler, den Du sicherlich auch schon bemerkt haben solltest.

Wenn Du mit CDATA etwas maskieren willst, dann müsste das z.B. so aussehen:

HTML:
<script type="text/javascript"><![CDATA[
document.write('<nichtvalideselement attribut="wert" />');
]]></script>

Beachte dabei vor allem das allumfassende <script> und die Anführungszeichen.
 
Werbung:
mit ' kommt es zum Fehler

Nein, das ergibt einen Fehler, den Du sicherlich auch schon bemerkt haben solltest.

Wenn Du mit CDATA etwas maskieren willst, dann müsste das z.B. so aussehen:

HTML:
<script type="text/javascript"><![CDATA[
document.write('<nichtvalideselement attribut="wert" />');
]]></script>

Beachte dabei vor allem das allumfassende <script> und die Anführungszeichen.

Genau da habe ich wohl ein Problem

PHP:
<?php

if ($_GET['Inhalt'] != "impressum")
   {
echo'         <br />
          <!--        twitter      -->
           <script type="text/javascript"><![CDATA[document.write('
           <a href="http://twitter.com/share" data-count="none" data-related="twitterapi" class="twitter-share-button" lang="de">Tweet</a>
              <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
              ');]]></script>
              ';

    };
?>

Ich kann aber leider keine ' Anführungszeichen verwenden da dies in einer IF-Abfrage steht.
 
Zuletzt bearbeitet:
Nein, das ist kein Grund. Ich baus nun extra mal für dich ...

PHP:
<?php

if ($_GET['Inhalt'] != "impressum")
{
 ?><!--        twitter      -->
<script type="text/javascript"><![CDATA[
document.write('<a href="http://twitter.com/share" data-count="none" data-related="twitterapi" class="twitter-share-button" lang="de">Tweet</a>');
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
]]></script>
<?php
}
?>

Ungetestet.

Und btw. wäre deine Begründung eher "weil es per echo ausgegeben wird". Mit der if-Bedingung hat das gar nichts zu tun.
 
Zurück
Oben