2

Estaba trabajando con la versión 5.6.10 de php y utilizaba la función utf8-encode($campo) para un campo tomado de la base de datos, el contenido del campo puede tener acento o ñ y los mostraba bien. cabe mencionar que la base de datos esta configurada para utf-8 y guarda bien los acentos y eñes

Migre a la version 5.6.30 de php y ahora muestra los caracteres mal ósea con símbolos en lugar de los acentos y las ñ. Le quite la función encoge($campo) y deje solo $campo y ya los muestra correctamente.

Alguien conoce el motivo o razón por la que ahora pasa esto? PHP ya detecta la codificación por si solo?

En el php.ini en ambos casos default_charset esta comentado.

Gracias y saludos!

Pillo
  • 236
  • 1
  • 10

1 Answers1

2

Está haciendo lo que debe hacer porque le has dicho en alguna parte que lo haga de una vez y no siempre. Es decir, has indicado la codificación de caracteres a nivel de configuración y no a nivel de programación. Es lo correcto, porque así la codificación se establece en un solo sitio (o en varios sitios, 3 ó 4), pero no por todas partes en el código.

Me explico:

En vez de estarle diciendo a cada rato que aplique la codificación adecuada con:

utf8-encode($campo);
utf8-encode($tambien-este-campo);
utf8-encode($yyyy-este-campo);
utf8-encode($y-el-campo-numero-999999);

Lo mejor es indicar la codificación por niveles y no tendrás que usar cada vez :utf8-encode.

Los niveles son más o menos:

  1. Establecer encodaje en el documento (HTML u otro)
  2. Establecer encodaje en el servidor (PHP u otro)
  3. Establecer encodaje en la conexión a la de datos
  4. Establecer encodaje en la base de datos misma (MySQL u otro)

Lo de los niveles y su importancia lo he explicado con más detalle en la respuesta a la pregunta: ¿Por que el Carácter inspector (�) aparece en algunos datos obtenidos de la Base de Datos?

A. Cedano
  • 86,578
  • 19
  • 122
  • 221
  • esto es 100% correcto y hacerlo de una manera distinta es una mala practica; ademas sugiero que con notepad++ pases todos los archivos `php,js,html` a `utf-8;` ademas establecer en el `php.ini` la directiva del `charset default_charset = "utf-8";` o establecerla mediante `.htaccess` `AddDefaultCharset UTF-8` `php_value default_charset UTF-8` – ArcanisGK507 Jul 11 '17 at 20:07
  • Muchas gracias a todos, seguí sus consejos y ya esta funcionando al 100 – Pillo Aug 10 '17 at 21:43
  • No olvides marcar la respuesta como solución, para que la pregunta no aparezca como sin resolver. Me alegro de que esté funcionando @Pillo. Saludos. – A. Cedano Aug 10 '17 at 22:23