0

Tengo la siguiente cadena: "Buen dia señores, para cuando está programada la cita" El problema es que este campo, llamado "descripcion" en la base de datos en mysql está guardada con estos errores, pero esto no ocurre con todos los registros. Tengo una tabla donde al darle doble click a cada registro, se abre una ventana modal donde se muestra ese campo. Lo que hice fue que por php le coloqué esto: utf8_decode(descripcion) y de esta manera me apareció bien, pero resulta que otro registro que estaba bien (sin caracteres extraños), no le sale el valor del campo. E incluso la llamada a ajax para la cadena que no tiene caracteres extraños no retorna ninguna respuesta. Gracias de antemano.

  • revisa en el sitio sobre PHP y UTF, he perdido la cuenta de la cantidad de preguntas duplicadas – fredyfx May 10 '20 at 20:37
  • mira: https://es.stackoverflow.com/search?q=php+caracteres+extra%C3%B1os y también revisa esto: https://es.stackoverflow.com/questions/59489/por-que-el-car%c3%a1cter-inspector-aparece-en-algunos-datos-obtenidos-de-la-base – fredyfx May 10 '20 at 20:42

1 Answers1

0

Deberías corregir eso en la fuente de origen. Comprueba que la codificación de esa tabla de la base de datos es utf8 y que el script que los introduce lo hace en utf8.

Dicho eso, hay un proyecto en github que arregla eso por ti, está aquí: https://github.com/neitanod/forceutf8

Funciona así y no necesitas saber el encoding de origen:

require_once('Encoding.php');
use \ForceUTF8\Encoding;

echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÂédÃÂération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");

Devuelve:

Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football

Si aún así te interesa saber cómo arreglarlo "a las malas", está el comando https://www.php.net/manual/es/function.mb-detect-encoding.php que se usa así:

$str = "Fédération Camerounaise de Football";
$result = mb_detect_encoding($str, 'UTF-8', true);

Donde en este caso, $result sería false ya que ese string no está en utf8.

Como parche y no recomendable porque no estás arreglando el problema, podrías hacer lo siguiente:

if (mb_detect_encoding($tu_texto, 'UTF-8', true) == false) { 
    $tu_texto = utf8_decode($tu_texto);
}
HackeMate
  • 703
  • 3
  • 7
  • Hola, el problema ocurre por registros que vienen creados desde correo electrónico. Sin embargo, para modificar el registro, hice el cambio que me dijiste para verificar si el texto es utf-8, y me indica que sí es utf8, porqué será que me lo detecta utf-8, si tiene esos caracteres =S – lagapornis May 11 '20 at 14:51