![]() |
Feel free with Open Source SoftwareAndries Filmer - Internet professional sinds 1996.
|
|
|
|
Vreemde karakters op een website - UTF-8 EncodingIntroductieSoms komen er vreemde karakters op een website te voorschijn als de 'character encoding' niet goed is ingesteld. Dat gebeurt vaak na een verhuizing van provider of server. Je ziet dan ö, ß, ü, ä, of Ü, in plaats van karakters zoals ä, Ü, ß, ç, or é. Vroeger werd er alleen met ascii-code gewerkt en dat zijn nu meestal te weinig karakters. Daarna kwamen er meer standaarden zoals iso-8859-1 in het leven om meerder karakters te ondersteunen. Dat is in de meeste gevallen goed genoeg maar als je nog meer exotische karakters wilt gebruiken dan moet je UTF-8 gebruiken. UTF-8 ondersteund bijna alle talen en is nu de standaard.
Als je UTF-8 wilt gebruiken dan moet je ervoor zorgen dat alles UTF-8 is.
Dit artikel geeft uitleg hoe je dit moet instellen voor een Apache webserver en een MySql database.
De content op de websiteHier hoef je meestal niets aan te doen. Normaal maak je de content lokaal en ftp je de content naar de website. Elk modern besturingsyteem ondersteund UTF-8.
De connectie op de webserverJe kan met bekijk pagina info (rechtermuis op de webpagina) de informatie over Encoding en content-type opvragen. In het onderstaande voorbeeld zie je Encoding op ISO-8859-1 staan en content-type op UTF-8 staan. Dat is niet oké. Ook andere combinaties zijn (vaak) niet oké.
Dat kan je op verschillende manieren oplossen.
Methode 1
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> Aan de webserver (apache) kan je zeggen welke karakterset hij moet gebruiken. Voeg in .htaccess de volgende regel toe:
AddDefaultCharset utf-8
Methode 2
AddDefaultCharset Off
De content in de databaseNu gaan we ervoor zorgen dat de database (content en connecties) UTF-8 ondersteund.
We gaan de ISO 8859-1 (latin1) omzetten naar UTF-8 Maak eerst een dump van de database
mysqldump -opt database -h localhost -u dbuser -p > databaseDump_latin1.sql Verander de karakter set van latin1 naar utf-8
sed “s/CHARSET=latin1/CHARSET=utf8/”< databaseDump_latin1.sql > databaseDump_utf8.sql Daarna willen we de karakters converteren naar utf-8
iconv -f utf-8 -t utf-8 < databaseDump_utf8.sql > databaseDump.sql Dan importeren we de nieuwe ge-converteerde tabellen met content in de database
mysql -h localhost -u dbuser -p < databaseDump.sql
De connectie met de databaseDe databaseserver moet met utf-8 ondersteuning worden opgestart. Dit zorgt ervoor dat de connecties van server naar client UTF-8 zijn. Voeg de volgende regels toe aan het opstart script van de databaseserver de sectie [mysqld]
[mysqld] ..... init-connect='SET NAMES utf8' character-set-server=utf8 character_set_client=utf8 collation-server=utf8_general_ci skip-character-set-client-handshake Daarna de Mysql server opnieuw starten Mocht je de website ondergebracht hebben bij een shared-hosting provider waarbij de databaseserver wordt gedeeld met andere gebruikers dan kan dit wel eens een probleem worden. Want dan zal hij dit niet gauw doen omdat wel eens problemen kan geven. Er zijn andere oplossingen mogelijk, maar de provider moet dan aangeven welke oplossing voor handen is.
PHPZelf heb ik geen problemen met PHP, maar als je zelf de php.ini kan aanpassen dan is het ook verstandig om de standaard karakterset aan te passen naar UTF-8.
default_charset = "UTF-8"
Meer informatie
Ik zou heel leuk vinden als je laat weten wat je van deze pagina vindt. Plaats gerust commentaar. |
|
Andries Filmer | http://andries.filmer.nl | andries@filmer.nl | © 2011
|