Seu problema está relacionado à sua codificação de charset. É importante que todo code tem o mesmo charset para evitar problemas em que os caracteres são exibidos incorretamente.
Existem algumas configurações que precisam ser definidas corretamente e eu recomendo fortemente o UTF-8, pois ele contém a maioria das letras que você precisa (escandinavo, grego, árabe, russo etc.).
Aqui está uma pequena lista de coisas que devem ser definidas para um conjunto de caracteres específico.
Cabeçalhos
-
Configurando o charset nos cabeçalhos HTML e PHP para UTF-8
-
PHP:
header('Content-Type: text/html; charset=utf-8');
(Os cabeçalhos PHP devem ser colocados antes de qualquer saída (eco, espaço em branco, HTML)!)
-
HTML:
<meta charset=utf-8" />
(Os cabeçalhos HTML são colocados dentro do<head>
/</head>
marcação)
-
Conexão
-
Você também precisa especificar o charset na própria conexão . Para o seu exemplo PDO, é feito assim
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
Observe ocharset=utf8
-atributo. Outras APIs do MySQL têm maneiras diferentes de fazer isso, caso você use outra coisa no futuro.
Banco de dados
-
Seu banco de dados e suas tabelas devem ser definidas como UTF-8. Observe que o conjunto de caracteres não o mesmo que colação. Vejo que você já definiu seu agrupamento para UTF-8, então isso é bom, mas faça o mesmo para todo o banco de dados e todas as tabelas.
Você pode fazer isso executando as consultas abaixo uma vez para cada banco de dados e tabelas (por exemplo, no phpMyAdmin)
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Observe que quaisquer dados já armazenados no banco de dados não terão automaticamente seu conjunto de caracteres quebrado corrigido. Portanto, é importante que você faça isso antes de inserir os dados ou reinsira-os após definir o conjunto de caracteres.
especificação do php.ini
-
No seuphp.ini
arquivo, você deve especificar o charset padrão para sua plataforma, como este
default_charset = "utf-8";
Codificação de arquivo
- Também é importante que o
.php
arquivo em si é codificado em UTF-8. Se você estiver usando o Notepad++ para escrever seu código, isso pode ser feito no menu suspenso "Formato" na barra de tarefas.
Emojis
- No MySQL (tanto na tabela, banco de dados e objeto de conexão), você precisará especificar o
utf8mb4
charset, ao contrário doutf8
normal , se você deseja trabalhar com emojis.
Eu não sei muito sobre Java, mas se você pode definir atributos para UTF-8 também, faça isso. Em essência, tudo o que pode ser definido para um conjunto de caracteres específico deve ser definido para o mesmo.
Se você seguir todas as dicas acima, é provável que seu problema seja resolvido. Caso contrário, você pode dar uma olhada nesta postagem do StackOverflow: UTF-8 até o fim .