En este post voy a mostrar cómo solucioné un error que me estaba fastidiando demasiado y que tenía tiempo que no me sucedía.
Resulta que al estar trayendo datos de una base de datos con MySQL y PHP se mostraban caracteres raros con signos de interrogación cuyo char code es 65535:

Como se puede apreciar en la imagen, no muestra letras con acento y al usar json_encode tampoco devuelve nada.
Cabe mencionar que en el head
de mi HTML todo estaba correcto con el meta:
<meta charset="UTF-8">
Y el charset de mi base de datos con mi tabla ya lo había cambiado desde utf8_spanish_ci
a otros. Ya estaba enloqueciendo hasta que dije:
¿Cómo es que en otros proyectos esto no me pasa?
Así que revisé mi plantilla en GitHub y afortunadamente ahí estaba la respuesta:
SET NAMES 'utf8';
No sé cómo funciona ni de qué se trata, pero antes de eso tenía mi PDO
así:
<?php
$bd = new PDO('mysql:host=localhost;dbname=' . $nombre_base_de_datos, $usuario, $contraseña);
return $bd;
Después lo hice así:
<?php
$bd = new PDO('mysql:host=localhost;dbname=' . $nombre_base_de_datos, $usuario, $contraseña);
$bd->query("SET NAMES 'utf8'");
return $bd;
¡Magia pura! ahora sí funcionaba:

Si ves el botón un poco raro es porque estoy depurando el objeto con json_encode
. El punto es que ahora sí funciona.
Por cierto, si quieres, puedes ver un tutorial de PHP con PDO y varios motores de búsqueda.