Dit problem er relateret til din tegnsæt-kodning. Det er vigtigt, at din hele kode har det samme tegnsæt for at undgå problemer, hvor tegn vises forkert.
Der er en del indstillinger, der skal defineres ordentligt, og jeg vil stærkt anbefale UTF-8, da dette har de fleste bogstaver, du har brug for (skandinavisk, græsk, arabisk, russisk osv.).
Her er en lille liste over ting, der skal indstilles til et specifikt tegnsæt.
Overskrifter
-
Indstilling af tegnsættet i både HTML- og PHP-headere til UTF-8
-
PHP:
header('Content-Type: text/html; charset=utf-8');
(PHP-headere skal placeres før enhver output (ekko, mellemrum, HTML)!)
-
HTML:
<meta charset=utf-8" />
(HTML-headere er placeret i
<head>
/</head>
tag)
-
Forbindelse
-
Du skal også angive tegnsættet i selve forbindelsen . For dit PDO-eksempel er det gjort sådan her
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
Bemærk
charset=utf8
-attribut. Andre MySQL-API'er har forskellige måder at gøre dette på, hvis du skulle bruge noget andet i fremtiden.
Database
-
Din database og dens tabeller skal indstilles til UTF-8. Bemærk, at tegnsæt ikke er det samme som sammenstilling. Jeg kan se, at du allerede har indstillet din sortering til UTF-8, så det er godt, men gør det samme for hele databasen og alle tabeller.
Du kan gøre det ved at køre nedenstående forespørgsler én gang for hver database og tabeller (for eksempel i phpMyAdmin)
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Bemærk, at data, der allerede er gemt i databasen, ikke automatisk vil have deres ødelagte tegnsæt rettet. Så det er vigtigt, at du gør dette, før du indsætter data, eller at du genindsætter det efter indstilling af tegnsættet.
php.ini-specifikation
-
I din
php.ini
fil, skal du angive standardtegnsættet for din platform, som dennedefault_charset = "utf-8";
Filkodning
- Det er også vigtigt, at
.php
selve filen er UTF-8-kodet. Hvis du bruger Notepad++ til at skrive din kode, kan dette gøres i rullemenuen "Format" på proceslinjen.
Emojis
- I MySQL (både i tabellen, databasen og forbindelsesobjektet), skal du angive
utf8mb4
tegnsæt i modsætning til almindeligutf8
, hvis du ønsker at arbejde med emojis.
Jeg ved ikke meget om Java, men hvis du også kan indstille attributter til UTF-8 der, så gør det. I bund og grund skal alt, der kan indstilles til et specifikt tegnsæt, indstilles til det samme.
Hvis du følger alle ovenstående tips, er chancerne for, at dit problem vil blive løst. Hvis ikke, kan du tage et kig på dette StackOverflow-indlæg: UTF-8 hele vejen igennem .