6

Estoy trabajando en una aplicacion que funcionacon webservice, pero tengo un problema cuando quiero consultar algún campo que contenga la letra Ñ o un acento, el problema es que si algún campo registrado en mi BD tiene esa letra el webservice me retorna vació.

Este es mi web servie:

<?PHP
header("Content-Type: text/html;charset=utf-8");
$hostname_localhost = "localhost";
$database_localhost = "mgrex";
$username_localhost = "root";
$password_localhost = "";

$json = array();

    $conexion = mysqli_connect($hostname_localhost,$username_localhost,$password_localhost,$database_localhost);

    $consulta = "select * from eventos";
    $resultado = mysqli_query($conexion, $consulta);

    while($registro=mysqli_fetch_array($resultado)){
        $json['evento'][]=$registro;    
    }

    mysqli_close($conexion);
    echo json_encode($json);
?>

Intente agregar esta linea a mi código PHP:

header("Content-Type: text/html;charset=utf-8");

Pero esto siguen sin funcionar, en la base de datos cambie la colección a utf8_spanish_ci pero tampoco funciona, no se que estoy haciendo mal.

Enrique Espinosa
  • 488
  • 5
  • 18
  • 1
    Puede que se trate de un problema en el charset de la conexión misma. Intenta poner esto inmediatamente después de `$conexion`...: **`mysqli_set_charset($conexion, "utf8");`** Si no funciona, revisa entonces cómo están esos datos almacenados en la BD (busca un dato con `ñ` y revísalo). Ah, otra cosa, si devuelve un JSON es preciso cambiar el `header` poniendo: `header("Content-Type: application/json;charset=utf-8");` – A. Cedano Dec 13 '18 at 19:54
  • Tienes razón , me funciono perfecto, puedes postearlo como respuesta para poder marcarlo como buena? – Enrique Espinosa Dec 13 '18 at 20:03

1 Answers1

5

Puede que se trate de un problema en el charset de la conexión misma1.

Intenta poner esto inmediatamente después de $conexion:

mysqli_set_charset($conexion, "utf8"); 

Si no funciona, revisa entonces cómo están esos datos almacenados en la BD (busca un dato con ñ y revísalo).

Otra cosa, si devuelve un JSON es preciso cambiar el header poniendo:

header("Content-Type: application/json;charset=utf-8");

NOTA DE OPTIMIZACIÓN:

Dado que se trata de un WebService, convendría establecer un control en el caso de que algo falle: no conexión, cero registros encontrados, etc. y emitir en ese caso un JSON con una clave error dentro o algo así. A no ser que estés manejando eso adecuadamente en Android.


  1. Ver esta respuesta para más detalles.
A. Cedano
  • 86,578
  • 19
  • 122
  • 221