Kennisbank

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

Een probleem met de pagina-encodering oplossen

Deze handleiding is bedoeld voor ontwikkelaars en webmasters die problemen ondervinden met de weergave van speciale tekens (bijv. accenten, Arabische tekens, Chinese tekens, emojis, enz.), of dit nu op een Infomaniak-website is of in hun 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 is anders gecodeerd dan de importparameter
    • HTML/CSS/JS-bestanden zijn verkeerd gecodeerd
    • Ontbrekende of onjuiste declaratie van de charset op de HTML-, PHP- of HTTP-pagina
  • 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 de verbinding 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 MySQL-codering utf8 ondersteunt geen 4-byte tekens, zoals emoji's. Deze worden weergegeven als ??. Daarom moet utf8mb4 worden gebruikt, wat een volledige implementatie van UTF-8 is.

 

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

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

<meta charset="UTF-8">
  • De database, tabellen en kolommen moeten in utf8mb4_unicode_ci of utf8mb4_general_ci staan.
  •  

  • Onder het tabblad Operaties selecteert u utf8mb4_unicode_ci voor de sorteervolgorde.
  • Om de codering op de server (Apache) af te dwingen:

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

    Fouten zoals é wordt ? of een emoji ☺ wordt ??, komen vaak voort uit een verkeerde codering.

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

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

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

     

    4. MySQL-Datenbank

    In phpMyAdmin geeft u de importcodering op (bijv. UTF-8, UTF-8MB4 of latin1, afhankelijk van het bestand).

    • Datenbank, Tabellen und Spalten müssen in utf8mb4_unicode_ci oder utf8mb4_general_ci sein.
    • Im Reiter Operationen wählen Sie utf8mb4_unicode_ci für die Sortierung.

    b) Nützliche SQL-Befehle

    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) Nach der PHP-Verbindung

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

     

    5. Datei .user.ini / .htaccess

    Um die Codierung auf der Serverseite (Apache) zu erzwingen:

    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. Import / Export von SQL-Dumps

    Fehler wie é wird zu ? oder ein Emoji ☺ wird zu ?? stammen oft von einer Codierungsfehlausrichtung.

    Überprüfen Sie die Codierung der SQL-Datei vor dem Import. Verwenden Sie iconv falls erforderlich:

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

    In phpMyAdmin geben Sie die Importcodierung an (z.B. UTF-8, UTF-8MB4 oder latin1 je nach Datei).

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


    Is deze veelgestelde vragenlijst nuttig geweest?