Andries filmer

Feel free with Open Source Software

Andries Filmer - Internet professional sinds 1996.
Ik ben groot voorstander van Free- en Opensource Software (FOSS) en laat deze site jouw overtuigen waarom dit goed is.
Home Over deze website Kennisbank Ezelsoren Freelancer Online gereedschap

Vreemde karakters op een website - UTF-8 Encoding

Inhoud
  1. Introductie
  2. De content op de website
  3. De connectie op de webserver
  4. De content in de database
  5. De connectie met de database
  6. PHP
  7. Meer informatie
  8. Commentaren

Introductie

Soms 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.

  • De content op de website
  • De connectie met de webserver
  • De content in de database
  • De connectie met de database

Dit artikel geeft uitleg hoe je dit moet instellen voor een Apache webserver en een MySql database.

De content op de website

Hier 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 webserver

Je 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
Als je alles zelf in de hand wilt hebben omdat je niet weet welke encoding door de website bezoekers gebruikt worden kan je zelf een extra header in de head van de html pagina zetten waardoor je webbrowser (bezoeker van de website) weet welke encoding wordt gebruikt.

 <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
Normaal moeten geen instelling nodig zijn omdat meestal standaard UTF-8 wordt gebruikt. Dus kan je kiezen om geen extra html header mee te sturen en in .htaccess de volgende regel te zetten:

 AddDefaultCharset Off

De content in de database

Nu 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 database

De 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.

PHP

Zelf 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

Deze pagina is gemaakt op 2010-05-13 en aangepast op 2010-05-14

Ik zou heel leuk vinden als je laat weten wat je van deze pagina vindt. Plaats gerust commentaar.
Je e-mailadres wordt niet gepubliceerd het is alleen om eventueel contact met je op te nemen.

 
Jouw naam
Jouw e-mailadres
Om te voorkomen dat robots dit formulier gebruiken vraag ik vriendelijk of je de volgende karakters wilt over typen.
 

 


Mijn Curriculum vitae | De content op deze website heeft de Creativecommons 3.0 licentie | © 2011
Andries Filmer | http://andries.filmer.nl | andries@filmer.nl | © 2011
Deze website wordt gerealiseerd met Free- en Open Source Software: | | | | | |