Su problema está relacionado con su codificación de juego de caracteres. Es importante que todo el código tiene el mismo conjunto de caracteres para evitar problemas en los que los caracteres se muestran incorrectamente.
Hay bastantes configuraciones que deben definirse correctamente y recomiendo encarecidamente UTF-8, ya que tiene la mayoría de las letras que necesitaría (escandinavo, griego, árabe, ruso, etc.).
Aquí hay una pequeña lista de cosas que deben configurarse en un juego de caracteres específico.
Encabezados
-
Establecer el conjunto de caracteres en los encabezados HTML y PHP en UTF-8
-
PHP:
header('Content-Type: text/html; charset=utf-8');
(Los encabezados de PHP deben colocarse antes de cualquier salida (eco, espacio en blanco, HTML)!)
-
HTML:
<meta charset=utf-8" />
(Los encabezados HTML se colocan dentro del
<head>
/</head>
etiqueta)
-
Conexión
-
También debe especificar el conjunto de caracteres en la conexión misma . Para su ejemplo de PDO, se hace así
$handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
Tenga en cuenta el
charset=utf8
-atributo. Otras API de MySQL tienen diferentes formas de hacer esto en caso de que use algo más en el futuro.
Base de datos
-
Tu base de datos y sus tablas deben establecerse en UTF-8. Tenga en cuenta que charset es no lo mismo que la colación. Veo que ya configuró su intercalación en UTF-8, así que está bien, pero haga lo mismo para toda la base de datos y todas las tablas.
Puede hacerlo ejecutando las consultas a continuación una vez para cada base de datos y tablas (por ejemplo, en phpMyAdmin)
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Tenga en cuenta que los datos que ya están almacenados en la base de datos no se repararán automáticamente. Por lo tanto, es importante que haga esto antes de insertar datos, o que los vuelva a insertar después de configurar el conjunto de caracteres.
especificación de php.ini
-
En tu
php.ini
archivo, debe especificar el conjunto de caracteres predeterminado para su plataforma, como estedefault_charset = "utf-8";
Codificación de archivos
- También es importante que el
.php
el archivo en sí está codificado en UTF-8. Si está utilizando Notepad ++ para escribir su código, esto se puede hacer en el menú desplegable "Formato" en la barra de tareas.
emojis
- En MySQL (tanto en la tabla, la base de datos y el objeto de conexión), deberá especificar el
utf8mb4
conjunto de caracteres, a diferencia deutf8
normal , si deseas trabajar con emojis.
No sé mucho sobre Java, pero si también puede establecer atributos para UTF-8 allí, hágalo. En esencia, todo lo que se puede establecer en un conjunto de caracteres específico debe establecerse en el mismo.
Si sigue todos los consejos anteriores, es probable que su problema se resuelva. Si no, puede echar un vistazo a esta publicación de StackOverflow: UTF-8 hasta el final .