Tengo un conjunto de palabras clave que se pasan a través a través de JSON de un DB (codificada UTF-8), algunos de los cuales pueden tener caracteres especiales como E, E, C, etc. Esto se usa como parte de un autocompletar. Ejemplo:Valores en UTF-8 está codificado como NULL en JSON
array('Coffee', 'Cappuccino', 'Café');
debo añadir que la matriz ya que proviene de la base de datos sería:
array('Coffee', 'Cappuccino', 'Café');
Pero JSON codifica como:
["coffee", "cappuccino", null];
Si imprimo éstos a través de print_r (), aparecen bien en una página web codificada en UTF-8, pero el café aparece como "café" si se usa texto/plano si quiero ver la matriz usando print_r ($ array); exit() ;.
Si codigo usando utf8_encode() antes de codificar a JSON, viene muy bien, pero lo que se imprime en la página web es "café" y no "café".
También es extraño, pero json_last_error() se ve como una función indefinida, pero json_decode() y json_encode() funcionan bien.
Cualquier ideas sobre cómo obtener datos codificados UTF-8 a partir de la base de datos a comportarse de la misma durante todo el proceso?
eidt: Aquí está la función de PHP que obtiene las palabras clave y los convierte en una sola matriz:
private function get_keywords()
{
global $db, $json;
$output = array();
$db->query("SELECT keywords FROM listings");
while ($r = $db->get_array())
{
$split = explode(",", $r['keywords']);
foreach ($split as $s)
{
$s = trim($s);
if ($s != "" && !in_array($s, $output)) $output[] = strtolower($s);
}
}
$json->echo_json($output);
}
El método JSON :: echo_json simplemente codifica, selecciona la cabecera y las impresiones (para el uso con el prototipo)
EDIT: DB Tipo de conexión:
function connect()
{
if ($this->set['sql_connect'])
{
$this->connection = @mysql_connect($this->set['sql_host'], $this->set['sql_user'], $this->set['sql_pass'])
OR $this->debug("Connection Error", mysql_errno() .": ". mysql_error());
$this->db = @mysql_select_db($this->set['sql_name'], $this->connection)
OR $this->debug("Database Error", "Cannot Select Database '". $this->set['sql_name'] ."'");
$this->is_connected = TRUE;
}
return TRUE;
}
más actualizaciones: simple script PHP me encontré:
el envío de la matriz a través de esta función antes de hacer json_encode()echo json_encode(array("Café")); // ["Caf\u00e9"]
echo json_encode(array("Café")); // null
json_last_error() estuvo disponible en 5.3.0, debe ejecutar una versión anterior. Así que al menos esta extrañeza se explica ahora :) –
@Anti - Gracias. Solo encontré ese error al tratar de descubrir por qué los datos codificados se codifican como NULL. – mwieczorek
¿Puedes mostrar el código para 'echo_json'? –