Ditt problem är relaterat till din teckenuppsättningskodning. Det är viktigt att din hela kod har samma teckenuppsättning för att undvika problem där tecken visas felaktigt.
Det finns en hel del inställningar som måste definieras korrekt och jag rekommenderar starkt UTF-8, eftersom den har de flesta bokstäver du behöver (skandinaviska, grekiska, arabiska, ryska, etc.).
Här är en liten lista över saker som måste ställas in på en specifik teckenuppsättning.
Rubriker
-
Ställer in teckenuppsättningen i både HTML- och PHP-rubriker till UTF-8
-
PHP:
header('Content-Type: text/html; charset=utf-8');
(PHP-huvuden måste placeras före alla output (eko, blanksteg, HTML)!)
-
HTML:
<meta charset=utf-8" />
(HTML-headers placeras i
<head>
/</head>
tag)
-
Anslutning
-
Du måste också ange teckenuppsättningen i själva anslutningen . För ditt PDO-exempel görs det så här
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
Notera
charset=utf8
-attribut. Andra MySQL-API:er har olika sätt att göra detta om du skulle använda något annat i framtiden.
Databas
-
Din databas och dess tabeller måste ställas in på UTF-8. Observera att teckenuppsättning inte är samma som sammanställning. Jag ser att du redan har ställt in din sortering på UTF-8, så det är bra, men gör samma sak för hela databasen och alla tabeller.
Du kan göra det genom att köra frågorna nedan en gång för varje databas och tabell (till exempel i phpMyAdmin)
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Observera att all data som redan finns lagrad i databasen inte automatiskt kommer att få sin trasiga teckenuppsättning fixad. Så det är viktigt att du gör detta innan du infogar data, eller att du sätter in det igen efter att du har ställt in teckenuppsättningen.
php.ini-specifikation
-
I din
php.ini
fil, bör du ange standardteckenuppsättningen för din plattform, så härdefault_charset = "utf-8";
Filkodning
- Det är också viktigt att
.php
själva filen är UTF-8-kodad. Om du använder Notepad++ för att skriva din kod kan detta göras i rullgardinsmenyn "Format" i aktivitetsfältet.
Emojis
- I MySQL (både i tabellen, databasen och anslutningsobjektet) måste du ange
utf8mb4
teckenuppsättning, i motsats till vanligutf8
, om du vill arbeta med emojis.
Jag kan inte så mycket om Java, men om du kan ställa in attribut till UTF-8 där också, gör det. I huvudsak bör allt som kan ställas in på en specifik teckenuppsättning ställas in på samma.
Om du följer alla tipsen ovan är chansen stor att ditt problem kommer att lösas. Om inte, kan du ta en titt på detta StackOverflow-inlägg: UTF-8 hela vägen igenom .