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
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
utf8in plaats vanutf8mb4 - MySQL-tabel of -kolom in
latin1ofutf8in plaats vanutf8mb4 - 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
- PHP-verbinding in
- 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
- Gebruik overal
- 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_ciofutf8mb4_general_cihebben. - In het tabblad Operaties kiest u
utf8mb4_unicode_civoor 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.sqlGeef 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?