Kennisbank

1.000 veelgestelde vragen, 500 tutorials en uitlegvideo's. Hier vind je alleen maar oplossingen!

Een probleem met de codering van pagina's oplossen

Bijwerken 04-08-2026

Deze handleiding is bedoeld voor ontwikkelaars en webmasters die problemen ondervinden met de weergave van speciale tekens (bijvoorbeeld accenten, Arabische tekens, Chinese tekens, emoji's, enz.), zowel op een Infomaniak-website als in de database.

 

Inleiding

  • Veelvoorkomende oorzaken van verkeerd weergegeven tekens die in plaats van speciale tekens of emoji's verschijnen, zoals ??:
    • PHP-verbinding in utf8 in plaats van utf8mb4
    • MySQL-tabel of -kolom in latin1 of utf8 in plaats van utf8mb4
    • SQL-bestand met een andere codering dan de importinstelling
    • HTML/CSS/JS-bestanden met een verkeerde codering
    • Ontbrekende of onjuiste declaratie van de charset aan de HTML-, PHP- of HTTP-zijde
  • Gebruikelijke oplossingen:
    • Gebruik overal utf8mb4: database, verbindingen, tabellen, kolommen, bestanden, headers
    • Controleer de codering van alle bestanden en dumps
    • Test de weergave van emoji's, accenten en andere meertalige tekens
  • Raadpleeg ook deze andere handleiding om een andere codering te forceren bij het verbinden met een MySQL-database.

 

Gebruik een teksteditor die het opslaan in UTF-8 zonder BOM ondersteunt (Visual Studio Code, Sublime Text, Notepad++...).

 

1. Gebruik overal UTF-8 of UTF-8MB4

De utf8-codering van MySQL ondersteunt geen tekens van 4 bytes, zoals emoji's. Deze worden weergegeven als ??. Daarom moet u utf8mb4 gebruiken, wat een volledige implementatie van UTF-8 is.

 

2. HTML – Correcte declaratie van de tekencodering

In de <head> van uw HTML-pagina's:

Zorg er ook voor dat de CSS/JS-bestanden zijn opgeslagen in UTF-8 (zonder BOM).

Assurez-vous aussi que les fichiers CSS/JS sont enregistrés en UTF-8 (sans BOM). 

 

3. PHP – UTF-8 of UTF-8MB4 forceren

a) HTTP-headers

header('Content-Type: text/html; charset=utf-8');

b) MySQL-verbinding (MySQL API)

b) Connexion MySQL (API MySQL)

$connection = mysql_connect($host, $user, $pass);
mysql_set_charset('utf8mb4', $connection);

c) PDO-verbinding

 $dsn = "mysql:host=localhost;dbname=ma_base;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $pass, [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

 

4. MySQL-database

a) Configuratie in phpMyAdmin

  • De database, tabellen en kolommen moeten de codering utf8mb4_unicode_ci of utf8mb4_general_ci hebben.
  • In het tabblad Operaties kiest u utf8mb4_unicode_ci voor de collatie.

b) Nuttige SQL-opdrachten

ALTER DATABASE ma_base CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE ma_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

c) Na de PHP-verbinding

mysqli_query($conn, "SET NAMES 'utf8mb4'");
mysqli_query($conn, "SET CHARACTER SET 'utf8mb4'");

 

5. .user.ini / .htaccess-bestand

Om de codering aan de serverkant (Apache) te forceren:

AddDefaultCharset utf-8
Header set Content-Type "text/html; charset=utf-8"
# Voor PHP
php_value default_charset UTF-8
php_value mbstring.internal_encoding UTF-8

 

6. SQL-dumps importeren/exporteren

Fouten waarbij é bijvoorbeeld verandert in ? of een emoji ☺ verandert in ??, komen vaak voor doordat de tekencodering niet correct is ingesteld.

Controleer de codering van het SQL-bestand voordat u het importeert. Gebruik indien nodig iconv:

iconv -f ISO-8859-1 -t UTF-8 dump.sql > dump_utf8.sql

Geef in phpMyAdmin de importcodering op (bijvoorbeeld UTF-8, UTF-8MB4 of latin1, afhankelijk van het bestand).

Link naar deze veelgestelde vragen: https://faq.infomaniak.com/1124


Is deze veelgestelde vragenlijst nuttig geweest?