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

list-element auslagern: character data is not allowed here

buggie

Neues Mitglied
hallo,

gleichmal vorweg: ich bin absoluter neuling...also habt bitte verständis ;)

ich möchte meine navi auslagern. habe eine unordered list erstellt und mittels css die <li> block elemente zu inline-elementen gemacht, sodass sie horizontal dargestellt werden.

nun wollte ich die <li> folgendermaßen auslagern:

<div id="navigation">
<ul>
<?php include('inc_navi.php')?>
</ul>
</div>

in der inc_navi.php steht das:

<li><a href="#">&raquo; Galerie</a></li>
<li><a href="#">&raquo; Austattung</a></li>
<li><a href="#">&raquo; Sehenswertes</a></li>
<li><a href="#">&raquo; Anreise</a></li>

und bekomme bei der validierung folgenden fehler:

Validation Output: 1 Error

Line 21, Column 4: character data is not allowed here <li><a href="#">&raquo; Galerie</a></li>was da los?

Was ich schon versucht habe:
wenn ich die gesamte <ul> <li></li>....<li></li></ul>
auslagere, bekomme ich oberen Fehler nicht, dafür hat mein <div id="navigation"> container auf einmal einen leeren Inhalt, den ich auch nicht mit margin: 0px; und padding: 0px; wegbekomme. Das sieht nicht schön aus, weil ich dem div container einen background gebe und die Links dann horizontal nicht mittig über dem hintergrund sind, sondern dieser leere Block über den inline-elementen ist...wie kommt das zustande?
 
Das ist bestimmt eine Byte Order Mark zu Beginn von inc_navi.php. Du müsstest deinen Editor so konfigurieren können, dass die nicht hinzugefügt werden.

Die günstigere Vorgehensweise wäre es wahrscheinlich, div#navigation komplett in die Include-Datei auszulagern. So vermeidest du möglichst viel doppelten Code.
 
hi,

super, hab die inc_navi.php einfach nochmal gespeichert und das häckchen bei BOM weggemacht, und siehe da keinen Fehler mehr..

hatte auch schonmal versucht alles samt index.php ohne die byte order mark abzuspeichern, bekomme dann allerdings 3 warnungen auf w3.org...habe nicht ganz verstanden was es mit dieser byte order mark auf sich hat. naja werde mich ma belesen :)
vielen dank auf jeden fall!

edit: habs gradmal im wiki überflogen: ich nutze den utf-8 also brauche ich die BOM ja nicht unbedingt, aber es ist trotzdem nicht schlecht weil mein zeichensatz sonst möglicherweise als iso-8859 zeichensatz interpretiert wird, aber bei php version<6 führt die BOM zum fehler: verwendung überschüssiger zeichen...
manman auf was man alles achten muss...

dann steht ganz unten nochwas von output-buffering...ist das die lösung, BOM mit php zu verwenden?
 
Zuletzt bearbeitet:
wenn ich alles ohne BOM abspeichere und auf w3.org prüfe bekomme ich folgende warnungen:

No Character Encoding Found! Falling back to UTF-8. None of the standards sources gave any information on the character encoding labeling for this document. Without encoding information it is impossible to reliably validate the document. As a fallback solution, the "UTF-8" encoding was used to read the content and attempt to perform the validation, but this is likely to fail for all non-trivial documents.



No Character encoding declared at document level
No character encoding information was found within the document, either in an HTML meta element or an XML declaration. It is often recommended to declare the character encoding in the document itself, especially if there is a chance that the document will be read from or saved to disk, CD, etc.


ich habe doch im head den zeichensatz angegeben oder fehlt da was?



<head>
<title>*** </title>
<meta http-equiv="Conten-Type" content="text/html;charset=UTF-8" />
<link rel="stylesheet" type="text/css" media="screen" href="screen.css"/>
</head>




danke auch noch für den tip den ganz div-container auszulagern, gefällt mir :)
 
Dein Server scheint dann standardmäßig kein Encoding im Header mitzuschicken. Das kannst du entweder serverseitig festlegen (etwa per .htaccess-Datei) oder -- das würde ich machen -- indem du in jedes PHP-Dokument (ohne BOM!) bzw. in ein weiteres Include vor die erste Ausgabe (also ganz an den Anfang der Datei) die folgende Zeile setzt:

PHP:
<?php header('Content-Type: text/html; charset=UTF-8'); ?>

Etwas eigenartig ist das Verhalten aber trotzdem. -- Validierst du über die URL oder per Upload/Direkteingabe? Kannst du einen Link zu deiner Seite posten?
 
ich habe xampp auf meinem rechner und
validieren tu ichs mittels dem web developer plugin für den firefox
also ich nehme mal an das entspricht der upload/direkteingabe

wo muss ich das hinpacken? in die einzelnen dateien der ausgelagerten inhalte?

bekam vom browser folgende fehlermeldung:

Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\Xamp ....\index.php:15) in C:\Programme\Xamp ....\index.php on line 15

edit:
was ich gerade festgestellt habe, im internet explorer 6 erkennt er mir ohne bom nicht den utf-8. also umlaute usw werden falsch dargestellt, hängt das mit xampp zusammen?

achso nochwas in xampp habe ich den apache-server am laufen falls das irgendwie relevant ist..
 
Zuletzt bearbeitet:
Nein, nur ganz oben in die Hauptdateien. Also diejenigen Dateien, die im Browser aufgerufen werden. Und zwar wie gesagt vor der ersten Ausgabe (eine BOM wäre auch eine Ausgabe), sonst gibt es die Fehlermeldung, die du da bekommen hast.

PHP:
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
<!DOCTYPE ...


<div id="navigation">
<ul>
<?php include('inc_navi.php')?>
</ul>
</div>

...

</html>
 
also habs jetzt so wie unten und bekomme keine Fehlermeldung mehr im browser. Der Internet Explorer 6 erkennts jetzt auch wieder richtig als utf-8 aber bei der validierung bekomme ich noch immer die 2 fehler...komisch oder? vielleicht lade ichs ma manuell...mom
werde das mit den div-containern auch noch anders machen glaub ich, vielleicht ne kleine ordner hierarchie anlegen und den content div auch auslagern..ich kann php auch ineinander schachteln oder, also php in php includen? wie gesagt bin noch am anfang :)

HTML:
<?php header('Content-Type: text/html; charset=UTF-8'); ?> 
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
        <title> Title </title>
        <meta http-equiv="Conten-Type" content="text/html;charset=UTF-8" />
        <link rel="stylesheet" type="text/css" media="screen" href="screen.css"/>
</head>

<body>

<div id="main-container">

    <?php include('inc_branding.php') ?>
    
    <?php include('inc_navi.php')?>
    
    <div id="Content">
        <div id="MainContent">
            <img id="TitleImg" src="http://www.html.de/images/title.jpg" alt="Bild:Beschreibung" title="Title"/>
        </div>
        
        <div id="SubContent">
            <h2>Beschreibung </h2>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet</p>
        </div>
        
    </div>
    
    <?php include('inc_footer.php') ?>    
</div>

</body>        

</html>

edit: hmm irgendwie wills nicht manuell...naja vielleicht liegts an der php extension? Ich hab keine ahnung..
 
Zuletzt bearbeitet:
Habe den Grund gefunden:

http-equiv="Conten-Type"

ich kann php auch ineinander schachteln oder, also php in php includen?

Ja. Wie du eine Seite am geschicktesten mit PHP aufbaust, ist allerdings eine Wissenschaft für sich. Es gibt schlauere Wege, als mit Einzelseiten und Includes zu arbeiten, aber dennoch ist das erstmal besser als gar nichts. Alternativen lassen sich allerdings leider nicht mal eben aus dem Stegreif erläutern.
 
hi,

da war der bug
einmal kurz vertippt und schon..; wenn man immer wüßte wo man suchen muss wärs wohl einfacher. Jetzt bekomme ich keine Warnung mehr! "Result: Passed " man hat das gerade schön grün ausgesehen..

für mich reicht zunächst mal die include - methode, ist ja meine erste Seite. Zuviel Schachtelung habe ich gerade festgestellt ist auch nix, da wirds nur unnötig kompliziert und statt doppelten code hat man doppelte dateien..

du warst auf jeden Fall ne super-schnelle Hilfe, many thanks!
und weiter so :D
 
Zurück
Oben