Вашият проблем е свързан с кодирането ви. Важно е цялата кодът има същия набор от знаци, за да се избегнат проблеми, при които знаците се показват неправилно.
Има доста настройки, които трябва да бъдат правилно дефинирани и силно бих препоръчал UTF-8, тъй като в него има повечето букви, от които се нуждаете (скандинавски, гръцки, арабски, руски и т.н.).
Ето малък списък с неща, които трябва да бъдат настроени на конкретен набор от знаци.
Заглавки
-
Задаване на набора от знаци както в HTML, така и в PHP заглавките на UTF-8
-
PHP:
header('Content-Type: text/html; charset=utf-8');
(PHP заглавките трябва да се поставят преди всички изход (ехо, интервал, HTML)!)
-
HTML:
<meta charset=utf-8" />
(HTML-заглавките се поставят в
<head>
/</head>
маркер)
-
Връзка
-
Трябва също да посочите набора от знаци в самата връзка . За вашия пример за PDO това се прави по следния начин
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
Обърнете внимание на
charset=utf8
-атрибут. Други MySQL-API имат различни начини за това, ако използвате нещо друго в бъдеще.
База данни
-
Вашата база данни и неговите таблици трябва да бъдат настроени на UTF-8. Обърнете внимание, че наборът от знаци е не същото като съпоставяне. Виждам, че вече сте задали съпоставянето на UTF-8, така че това е добре, но направете същото за цялата база данни и всички таблици.
Можете да направите това, като стартирате заявките по-долу веднъж за всяка база данни и таблици (например в phpMyAdmin)
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Имайте предвид, че всички данни, които вече са съхранени в базата данни, няма да имат автоматично фиксирани счупени знаци. Затова е важно да направите това, преди да вмъкнете данни или да ги поставите отново, след като зададете набора от знаци.
спецификация на php.ini
-
Във вашия
php.ini
файл, трябва да посочите набора от знаци по подразбиране за вашата платформа, като тозиdefault_charset = "utf-8";
Кодиране на файлове
- Важно е също
.php
самият файл е кодиран UTF-8. Ако използвате Notepad++, за да напишете кода си, това може да стане в падащото меню „Формат“ в лентата на задачите.
Емоджита
- В MySQL (и в таблицата, и в базата данни, и в обекта за връзка) ще трябва да посочите
utf8mb4
набор от знаци, за разлика от обикновенияutf8
, ако искате да работите с емоджита.
Не знам много от Java, но ако можете да зададете атрибути на UTF-8 и там, направете го. По същество всичко, което може да бъде настроено на определен набор от знаци, трябва да бъде настроено на същото.
Ако следвате всички указания по-горе, има вероятност проблемът ви да бъде решен. Ако не, можете да разгледате тази публикация в StackOverflow: UTF-8 докрай .