Investeerders

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 13-10-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.) op een website of in een database die gehost wordt door Infomaniak.

 

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:

<meta charset="UTF-8">

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

 

3. PHP – Dwing UTF-8 of UTF-8MB4 af

a) HTTP-headers

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

b) MySQL-verbinding (MySQL API)

$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 gebruikmaken van utf8mb4_unicode_ci of utf8mb4_general_ci.
  • 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-configuratie

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

 

5. .user.ini / .htaccess-bestand

Om de server-side codering (Apache) te forceren:

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

 

6. Importeren/exporteren van SQL-dumps

Fouten waarbij bijvoorbeeld é wordt weergegeven als ? of een emoji ☺ wordt weergegeven als ??, worden vaak veroorzaakt door een verkeerde tekencodering.

Controleer de tekencodering 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?