У меня есть набор ключевых слов, которые передаются через JSON из БД (в кодировке UTF-8), некоторые из которых могут иметь специальные символы, такие как é, è, ç и т. Д. Это используется как часть автоматическогозавершивший.Пример:
array('Coffee', 'Cappuccino', 'Café');
Я должен добавить, что массив в том виде, в котором он исходит из БД, будет:
array('Coffee', 'Cappuccino', 'Café');
Но JSON кодирует как:
["coffee", "cappuccino", null];
ЕслиЯ печатаю их с помощью print_r (), они хорошо отображаются на веб-странице в кодировке UTF-8, но caf выглядит как «café», если используется text / plain, если я хочу посмотреть на массив с помощью print_r ($ array);exit ();.
Если я закодирую с использованием utf8_encode () перед кодированием в JSON, все пройдет хорошо, но на веб-странице будет напечатано «cafà ©», а не «café».
Также странно, но json_last_error () рассматривается как неопределенная функция, но json_decode () и json_encode () работают нормально.
Любые идеи о том, как получить закодированные в UTF-8 данные из базы данных, чтобы они вели себято же самое на протяжении всего процесса?
EIDT: Вот функция PHP, которая захватывает ключевые слова и превращает их в один массив:
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);
}
Метод json :: echo_json просто кодирует,устанавливает заголовок и печатает его (для использования с Prototype)
EDИТ: Метод подключения к БД:
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;
}
Дополнительные обновления: Простой PHP-скрипт, который я запустил:
echo json_encode( array("Café") ); // ["Caf\u00e9"]
echo json_encode( array("Café") ); // null