Hoi lerrie,
Ik probeer even de stand van zaken op te maken.
Probleem 1 bestaat niet (meer).
Als ik de homepage van dit moment via FF of IE download en dan open met Notepad++, dan zegt deze dat de pagina als utf8-bestand gecodeerd is.
Dus Dreamweaver heeft 'm als utf-8 opgeslagen, terwijl de <meta> charset ook utf-8 is. Dat is dus in principe in orde.
Omdat deze twee synchroon lopen, zoals het hoort, kan je bij het aanmaken gewoon accenttekens en €'s via het toetsenbord intikken.
Zoals Mister Quick al zei, gaat het mis als niet opgeslagen wordt volgens de gehanteerde charset in de <meta>.
Dit gaat dan over rare tekens die in de tekst zelf komen te staan. - En die zouden er dus niet mogen zijn.
Probleem 2 bestaat nog wel.
Waarschijnlijk bedoel je deze tekens aan het begin, nog voordat er tekst staat:
Dat frutseltje
 is te zien in Firefox, niet in andere browsers.
En dat betekent dat er inderdaad een "BOM" in het bestand zit.
Dat staat voor Byte Order Mark, en die kan de zaak verstieren ook al is de pagina met de correcte codering opgeslagen.
Zo'n BOM heeft te maken met de interne huishouding van de computer (Windows, I presume?), en hoort niet geexporteerd te worden bij het uploaden naar je server. Achtergrond van de BOM:
zie hier ("Many Windows programs add BOMs to UTF-8 files by default.").
Het lastige is, vanwege het interne machinecode-karakter, dat zo'n BOM in de broncode van een bestand totaal niet te zien is.
Hoe kom je er af?
De raad van Mister Quick opvolgen: in
Notepad++ (even gratis downloaden) de pagina converteren naar "utf-8 zonder BOM", en dan opslaan.
- Voor alle veiligheid zet ik daarbij in het bestand ergens op een onschadelijke plaats een extra spatie, zodat het 100% zeker een nieuw bestand met dezelfde naam wordt.
Probleem 3 is geen probleem.
Blijft over het gemopper van de html-validator, die ondanks alle utf-8 settings de pagina toch als iso-8859-1 ziet binnenkomen.
Dit heeft echter met iets totaal anders dan het bovenstaande te maken!
De html-validator heeft het over de "HTTP-header", en dat is iets anders dan wat in de <head> van de pagina staat! De "HTTP-header" bestaat uit diverse informatie over het data-pakketje dat verzonden wordt: dat pakketje omvat deze header en de data van het bestand zelf (in ons geval: de html-paginacode).
- Een "HTTP-header" met charset gegevens kan, los van alles, meegestuurd worden door de server van de site. Of dat gebeurt, en welke charset dan wordt aangegeven, is afhankelijk van de server/provider.
Mijn provider doet het bv. niet, en als je in de
Developer Toolbar via "menu: Information > View Response Headers" van de pagina
rare-tekens-1.htm de server-gegevens opvraagt zie je dit:
Code:
Date: Mon, 07 Nov 2011 10:51:31 GMT
Server: Apache/2
Last-Modified: Mon, 07 Nov 2011 08:59:29 GMT
Etag: "88980cb-26d-4b12145be9e40"-gzip
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 427
[B]Content-Type: text/html[/B]
200 OK
Bij jouw elektrischeskateboardshop-pagina zie je echter:
Code:
Date: Mon, 07 Nov 2011 09:17:46 GMT
Server: Apache
Last-Modified: Mon, 07 Nov 2011 05:40:39 GMT
Etag: "868b29-2f40-4b11e7ea943c0"
Accept-Ranges: bytes
Content-Length: 12096
[B]Content-Type: text/html; charset=iso-8859-1[/B]
200 OK
Daar is de iso!
Nu schrijven de reglementen voor, dat de charset in een HTTP-header (indien aanwezig) voorrang heeft boven een charset in een <meta> definitie; zie o.a.
hier. Daarom houdt de html-validator ook de iso-codering aan, ondanks de <meta> met de utf-8.
Wat betekent dit nu in de praktijk?
Meestal gebeuren er met de West-Europese iso-8859-1 charset geen ongelukken als je in utf-8 werkt en gewoon Nederlands in de site gebruikt, zonder buitenissige lettertekens die niet in de iso-charset (zie
hier en
hier) werken.
- Eventueel zou je ook de iso-charset kunnen overrulen met een eigen HTTP-header. Die kan je opgeven als je er een php-site van maakt, waarin je op elke pagina als eerste regel zet (dus nog boven de Doctype declaratie):
PHP:
<?php header("Content-type: text/html; charset=utf-8"); ?>
Voor de validatie zelf maakt het meestal weinig uit (zie ook m'n reactie op
deze), anders wordt alleen alarm geslagen bij zo'n buitenissig letterteken. En zolang je op de pagina's zelf geen zwarte blokjes, lege mini-rechthoekjes of vraagteken-wybertjes tegenkomt in de tekst, kan je rustig slapen.
Resteert dus eigenlijk alleen maar het BOM-vrij maken.
En de echte html-errors.
Met vriendelijke groet,
CSShunter