1

Hola amigos se que esta pregunta es muy comun pero no comprendo del todo bien que pasa, estoy intentado convertir un array que contiene caracteres especiales a JSON.

1.- Este es el array que se me devuelve de una base de datos Me estoy conectando por un ODBC (SQL 2000) con PDO intente establecer utf8 pero no funciona:

Array
(
    [0] => Array ( [idOperadores] => 256 [operador] => JORGE CRUZ CEDE�O)

    [1] => Array ( [idOperadores] => 628 [operador] => BERNABE  CUEVAS BRISE�O)
)


$pdo = new PDO('odbc:odbcname', 'user', 'passwor');
$pdo->query('SET NAMES utf8');

2.- Convierto el array a JSON pero tampoco me funciono:

 $result = json_encode($array,JSON_UNESCAPED_UNICODE);

Estoy haciendo algo mal?, espero puedan ayudarme gracias.

Nota: He encotrado algunas referencias pero tendria que recorrer el array para establecer utf8_encode

  • Es muy probable que el problema esté cuando creas la conexión a la base de datos. Sugiero que revises aplicando los criterios y niveles indicados en **[esta respuesta](https://es.stackoverflow.com/a/59510/29967)** y que apliques la codificación como se indica en la misma, pasándola en el grupo de opciones antes de crear el objeto conexión. El problema podría estar en uno de los 4 niveles. – A. Cedano Aug 02 '17 at 19:20

1 Answers1

0

Tenés dos opciones:

Probá instanciando PDO así (te dejo un ejemplo con MySQL sacado de acá):

$pdo = new PDO("mysql:host=127.0.0.1;dbname=datos;charset=UTF8", 'usuario', 'contraseña');

No creo que esto sea necesario después de la línea anterior:

$pdo->query('SET NAMES utf8');

O, si estás configurando todo con odbcad32.exe, entonces debés agregar el seteo de configuración de caracteres (como hiciste con el host y el nombre de la DB) siguiendo los pasos de este artículo. Y ahí debería funcionar como vos lo tenés:

$pdo = new PDO('odbc:odbcname', 'user', 'passwor');

Ya que dentro de tu ODBC construido con odbcad32.exe ya tiene la configuración para UTF-8.

Avisame si te funcionó!

Saludos!

Genarito
  • 2,493
  • 17
  • 43
  • Gracias por contestar, estoy en Windows y el odbc lo he creado con **odbcad32.exe** y creo la conexion como comentas , $pdo = new PDO("odbc:odbcname:host=127.0.0.1;dbname=datos;charset=UTF8", 'usuario', 'contraseña'); , pero me sale un error. – Alexander Morales Aug 02 '17 at 16:39
  • Y no te funcionó la línea que te pasé? Según tengo entedido odbcad32.exe es un driver para conectarse a la DB, pero PDO es propio de PHP y no debería haber problema con el `charset=UTF8` – Genarito Aug 02 '17 at 16:44
  • Si exacto, **1.-** Antes, cree el odbc con **odbcad32.exe** llamado **"myodbc_db"** pasandole el host, el nombre de la base de datos, etc. Para conectarme entonces lo hago con esta linea y puedo empezar hacer mis consultas $pdo = new PDO('odbc:myodbc_db', 'usuario', 'contraseña'); – Alexander Morales Aug 02 '17 at 17:07
  • **2.** Ahora como tu comentas apartir del odbc creado en (1) seria: $pdo = new PDO("odbc:myodbc_db:host=127.0.0.1;dbname=datos;charset=UTF8", 'usuario', 'contraseña'); **Si intento esto me da un error PDOException -> PDO->__construct** No debo utilizar el myodbc_db creado o que parametro va en el odbc:odbcname que me dices ? – Alexander Morales Aug 02 '17 at 17:07
  • Ahh en ese caso fijate en este artículo de Microsoft donde explica como configurar la codificación de caracteres: http://doc.4d.com/4Dv15/4D/15.2/Instalacion-en-Windows.200-2885361.es.html – Genarito Aug 02 '17 at 17:08
  • Aclarando un poco, **$pdo = new PDO("odbc:odbcname:host=127.0.0.1;dbname=datos;charset=UTF8", 'usuario', 'contraseña');** **1.-** Entonces el parametro **odbcname** no es el nombre que va del odbc creado con **odbcad32.exe** ?? **2.-** El parametro **odbcname** tengo que instalar el driver en la doc. que me dices y crear un nuevo nombre?? Gracias por la ayuda. – Alexander Morales Aug 02 '17 at 17:22
  • Ahí edité la respuesta para ver si se entiende mejor – Genarito Aug 02 '17 at 17:50