2

Tengo una web en portugues, en la que al cambiar la versión de php y alguna cosa mas, al insertar en base de daos lo hace mal y al recuperarlo sale de la siguiente forma:

O hotel dispõe de 150 quartos. Todos os quartos têm telefone de ligação directa, acesso

Como se puede ver, estos caracteres: çã no son los correctos.

El caso es que si aplico a ese texto un utf8_encode() queda de la siguiente forma:

O hotel dispõe de 150 quartos. Todos os quartos têm telefone de ligação directa, acesso

Sigue saliendo igual.

Pero si aplico un utf8_encode(utf8_decode()) sale correcto:

O hotel dispõe de 150 quartos. Todos os quartos têm telefone de ligação directa, acesso

El problema esque hay algunos casos en que con utf8_encode() sale bien y otros no, y también sin poner nada aparece correcto. Como puedo detectar automaticamente cuando debo usar uno u otro?

Actualmente lo tengo puesto manualmente con if - else en función del id de la página, pero cada vez hay mas por lo que necesito automatizarlo

  • Los textos los tienes directamente en ficheros? Base de datos? Mira que codificación tienen los ficheros y/o la conexión a la base de datos. Si están e nbase de datos en que codificación esta la base de datos y/o las tablas. – Christian Jun 14 '17 at 10:36
  • Están en base de datos, el problema es al hacer el insert. Pero ahora no puedo cambiar los cientos de registros que estan mal en la base de datos. Por eso modifico solo la vista @Christian –  Jun 14 '17 at 10:40
  • Lo que se me ocurre es que la conexión a la base de datos la estés haciendo con una codificación diferente a UTF-8 – Christian Jun 14 '17 at 10:47
  • Probe con varias, el problema es que como en la bbdd hay algunos datos bien codificados y otros no pues puse `utf8` que era la que menos errores me daba @Christian –  Jun 14 '17 at 10:48
  • 2
    Podrías probar con http://php.net/manual/es/function.mb-detect-encoding.php – Christian Jun 14 '17 at 11:00
  • 1
    Te recomiendo que revises el problema **en el orden explicado en [esta respuesta](https://es.stackoverflow.com/a/59510/29967)** a la pregunta [¿Por que el Carácter inspector (�) aparece en algunos datos obtenidos de la Base de Datos?](https://es.stackoverflow.com/q/59489/29967), **para que te evites codificar-decodificar innecesariamente**. – A. Cedano Jun 14 '17 at 11:55
  • Lo mirare, ese caracter, también me aparece a mi a veces @A.Cedano –  Jun 14 '17 at 11:56
  • Lo probare, gracias @Christian –  Jun 14 '17 at 11:57
  • ¿Has comprobado la codificación del archivo php? ¿UTF-8 sin BOM? – Urko Jun 14 '17 at 11:55

1 Answers1

-1

¿Que motor de base de datos está usando? Si usa MySql intente agregar después de declarar la conexión a la base de datos mysqli_set_charset($link, 'utf8'); o mysql_set_charset('utf8',$link), dependiendo la extensión que este usando, esto le garantizará que en cada conexión almacenará o recuperará los registros adecuadamente además puede dejar la codificación de la base de datos así: database charset=utf8 y database collation utf8_general_ci

sacrom
  • 1
  • 4